2011-10-14 9 views
26

私はhibernateを使用しており、名前付きクエリを使用したかったのです。しかし、良い解決策であるかどうかは分かりません。名前付きクエリの利点を私に提供してください。休止状態での名前付きクエリの利点は?

名前付きクエリがコンパイルされると、 アプリケーションサーバに配備されているhbmファイル内の名前付きクエリを直接変更できますか?

私を助けてください。

ありがとうございます!

答えて

26

名前付きクエリは、SessionFactoryがインスタンス化されるときにコンパイルされます(基本的に、アプリケーションの起動時に)。

明らか利点は、したがって、すべての名前付きクエリではなく、実行時に失敗するよりも、その時点でを検証していることです。もう1つの利点は、easy(-ier)を維持することです - 確かに複雑なクエリのためです。

欠点は、名前付きクエリを実行でカスタマイズではないということです - あなたは何を定義したことは、あなたが買ってあげるものですもちろん、それを超えて、/供給パラメータを定義することができます。ソートを変更することさえできません。もう1つの欠点は、が、実行中のアプリケーションサーバー内の指定されたクエリをSessionFactoryをリロードせずに変更できないことです。

16

利点

  • HQLやネイティブSQLクエリは、コードなしで使用して交換することができ、あなたのコードに埋め込まれた文字列リテラルよりも保守が容易
  • アプリ起動時にコンパイルおよび検証

    • 変更(コードを再コンパイルする必要はありません)

    短所

    • 静的
    • ネイティブSQLクエリと結果セットのマッピング時々面倒

    だから、私は、あなたは間違いなくあなたのコード内の文字列リテラルに対する問合せの名前好むべきだと思います。実行時に何らかの動的クエリ作成が必要な場合は、Hibernate Criteria APIを見てください。 Hibernate Criteriaは必ずしも簡単で使いやすいものではありませんが、実行時にクエリー文字列を生成するのではなく、必ずそれを使用してください。

    HTH