Hibernateでは、HQLまたはcriteriaクエリは、あなたが望むほぼすべてのSQLクエリを実行できるようにする必要があります。しかし、多くの開発者は、Hibernateの生成されたSQL文が遅く、独自のSQL(ネイティブSQL)文を生成する方が望ましいという苦情を受けています。

ネイティブSQLクエリの例

HibernateはあなたのネイティブSQL文を直接呼び出せるように

createSQLQuery

メソッドを提供します。

{空} 1。この例では、HibernateにStock.classを返すように指示すると、すべての選択データ(** )がStock.classプロパティに自動的に一致します。

Query query = session.createSQLQuery(
"select **  from stock s where s.stock__code = :stockCode")
.addEntity(Stock.class)
.setParameter("stockCode", "7277");
List result = query.list();

{空} 2。この例では、HibernateはObject配列を返します。

Query query = session.createSQLQuery(
"select s.stock__code from stock s where s.stock__code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();

また、

ネームド・クエリ

を使用してネイティブSQL文を呼び出すこともできます。リンク://hibernate/hibernate-named-query-examples/[Hibernate named queries examples here]を参照してください。

Hibernateの生成されたSQL文は遅いですか?

私は、 “Hibernateの生成されたSQL文が遅い”という文に同意しません。しばしば、私は、これは、開発者がテーブルの関係をうまく理解しておらず、間違ったテーブルのマッピングやフェッチ戦略の悪用をしていることが原因であることがわかりました。これは、Hibernateが不要なSQL文を生成したり、不要なテーブルに参加したりする原因になります…​そして、開発者はこの言い訳をして、独自のSQL文を作成してバグを素早く修正し、 。

結論

いつもネイティブSQL文がHQLよりも便利で簡単ですが、ネイティブSQL文が必要な理由を慎重に考えてください。これは本当に休止状態ではありませんか?はいの場合は、次に進む〜

__P.S Oracleデータベースでは、多くの重要なパフォーマンス問合せでネイティブSQL文を使用する方が望ましいです。なぜなら、Oracle問合せのパフォーマンスを向上させるために「ヒント」を入れる必要があるからです。