Oracleのヒントを使用すると、Oracleの実行計画を変更して、Oracleがデータベースからデータを取得する方法に影響を与えることができます。
Oracleオプティマイザのヒント
の詳細については、こちらを参照してください。
Hibernateでは、HibernateクエリにOracleヒントを埋め込むことは可能ですか?
Hibernate setComment()?
Hibernateのカスタムコメント ”
setComment()
“機能を使用してOracleヒントをHQLに埋め込むことはできますか?ここで例を見てみましょう
1.オリジナルのHibernateクエリ
これは、ストックコードでストックを取り出すための単純な選択HQLです。
String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
.setString("stockCode", "7277")
.list();
出力
Hibernate:
select
stock0__.STOCK__ID as STOCK1__0__,
stock0__.STOCK__CODE as STOCK2__0__,
stock0__.STOCK__NAME as STOCK3__0__
from mkyong.stock stock0__
where stock0__.STOCK__CODE=?
2. Hibernate setComment()を試してください.
カスタムコメントをログファイルまたはコンソールに出力するには、Hibernateの設定ファイル(hibernate.cfg.xml)で
hibernate.use
sql
comments
を有効にします。
<!-- hibernate.cfg.xml --> <?xml version="1.0" encoding="utf-8"?> ... <hibernate-configuration> <session-factory> ... <property name = "show__sql"> true </property> <property name = "format__sql"> true </property> <property name = "use__sql__comments"> true </property> <mapping class = "com.mkyong.common.Stock"/> </session-factory> </hibernate-configuration>
Hibernate
setComment()
を使用して、カスタムコメントをクエリに挿入します。
ストリングhql = "ストックからs.stockCode =:stockCode"; リスト結果= session.createQuery(hql) .setString( "stockCode"、 "7277") .setComment( "INDEX(idx__stock__code)") 。リスト();
出力
休止状態:/** + INDEX(株式idx__stock__code)** /を選択すると、ストック0__STOCK__IDはSTOCK1__0__、ストック0__STOCK__CODEはSTOCK2__0__、ストック0__STOCK__NAMEはストック3__0__からmkyong.stock stock0__はストック0__STOCK__CODE =?
3. Is this work?
It’s not, there are two problem with Hibernate custom comments.
1. The Oracle hint have to append after the ‘select’, not before.
Hibernate generated query
/** INDEX(株式idx__stock__code)** /select
正しい方法は…
/** INDEX(株式idx__stock__code)** /....
{空} 2。 Hibernateは "/** "の間に余分なスペースを追加します
自動的に。
Hibernateでは、Oracleのヒントを埋め込む正式な方法はまだありません
Hibernateクエリ言語(HQL)に変換します。
__P.S Peteさんに感謝します.__
===実用的な解決策
唯一の解決策は、Hibernate ** createSQLQuery ** メソッドを使用して
ネイティブSQL文を実行します。
文字列hql = “/
INDEX(株式idx
stock
code)
/ ストックからsを選択** s.stock__code =:stockCode “;
リスト結果= session.createQuery(hql)
.setString( “stockCode”、 “7277”)
。リスト();
出力
Hibernate:/
+ INDEX(stockx idx
stock
code)
/select ** from stocksはどこからs.stock__code =?
More link://hibernate/hibernate-native-sql-queries-examples/[Native SQL queries examples]. link://tag/hibernate/[hibernate]link://tag/oracle/[oracle]