3
em.find(Enity.classs, Id)
em.createQuery("SELECT e From Entity e WHERE e.Id=:id")
これらは同等ですか?そうでない場合、どう違いますか?em.findとem.createQueryの違いは何ですか?
em.find(Enity.classs, Id)
em.createQuery("SELECT e From Entity e WHERE e.Id=:id")
これらは同等ですか?そうでない場合、どう違いますか?em.findとem.createQueryの違いは何ですか?
JPAプロバイダはJPAクエリを解析する必要がないため、前者のほうが高速かもしれません。しかし、結果として得られるSQLはまったく同じでなければなりません。
また、一部のプロバイダーは、キャッシュとキーキャッシングとの対比でキャッシュを扱う方法が異なります。
最後に、APIはfind()
でより快適です。単一エントリまたはnull
を返します。後者は、ちょうど1つの結果(getSingleResult()
- またはスロー)またはリスト(getResultList()
)を返します。
'find'メソッドは、ネイティブクエリまたはおそらくSQLトリガがHibernateの明示的な通知なしでデータベースを変更した場合、データベースの状態を反映しないキャッシュから結果を返す可能性があります。一方、 'createQuery'はデータベースに直接行き、結果を見つけることができません。 また、新しいエンティティが作成されている場合、自動フラッシュモードが有効になっていない場合は、クエリを使用して検索されないことがあります。 – egaga