亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Hibernate Criteria API 中添加 SQL-Server 查詢提示

如何在 Hibernate Criteria API 中添加 SQL-Server 查詢提示

斯蒂芬大帝 2021-11-17 17:30:50
我們正在使用 MS SQL-Server 和 Hibernate Criteria API。最近我發現一個查詢受到參數嗅探的影響,所以我想添加一個OPTION (RECOMPILE)as 查詢提示。但是雖然 Hibernate 似乎支持Criteria API的查詢提示,但添加的criteria.addQueryHint("OPTION (RECOMPILE)");似乎沒有任何影響(記錄的 SQL 不包含任何提示)。有任何想法嗎?
查看完整描述

1 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

似乎 Hibernate Criteria API 只支持 Oracle 數據庫的查詢提示。


我找到的最好的解決方案是自己實現對 SQL-Server 的支持(您也可以做類似的事情,criteria.add(Restrictions.sqlRestriction("1=1 OPTION (RECOMPILE) "));但這幾乎是一種黑客行為,如果您例如想向查詢添加排序則不起作用)。


我使用 Oracle 的 Hibernate 實現作為藍圖(看看Oracle8iDialect)。對于我的用例,實現一個將查詢提示附加到查詢末尾的版本就足夠了(因為OPTION-clause 總是在查詢的末尾)。


package de.mystuff.hibernate;


import java.util.List;


import org.hibernate.annotations.common.util.StringHelper;

import org.hibernate.dialect.SQLServer2008Dialect;



/**

 * Special version of {@link SQLServer2008Dialect} which adds a simple query hint support.

 */

public class MySQLServer2012Dialect extends org.hibernate.dialect.SQLServer2012Dialect {



    /**

     * {@inheritDoc}

     * <p>

     * Currently this is a pretty simple query hint implementation. It just concatenates all SQL hints and adds them to the end of the query. This is fine for

     * e.g. {@code OPTION (RECOMPILE)}.

     */

    @Override

    public String getQueryHintString(String sql, List<String> hints) {

        if (hints.isEmpty()) {

            // no query hints at all

            return sql;

        }


        // concatenate all hints

        final String hint = StringHelper.join(", ", hints.iterator());


        if (StringHelper.isEmpty(hint)) {

            // all query hints are empty

            return sql;

        }


        return sql + " " + hint;

    }


}

提醒您必須告訴 Hibernate 使用支持方言的查詢提示:


hibernate.dialect=de.mystuff.hibernate.MySQLServer2012Dialect


查看完整回答
反對 回復 2021-11-17
  • 1 回答
  • 0 關注
  • 238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號