質問

うでJPA2.0基準APIんでも面倒とは異なり、Hibernateの基準とします。が良かったことを理由にJPAを利用2.0基準APIによって使用JPA-QL?彼のアドバイスを記します。

役に立ちましたか?

解決

のように、Hibernateの基準APIにJPA2.0基準APIは特に何を問合せ 動的に, を取扱う場合は、クエリー構造の変化によって実行時の条件です。

があります。されながら、より詳細なり、Hibernateの基準APIにJPAを基準APIの構築 typesafe クエリを使用している場合は、メタモデ供している。以下の例:

EntityManager em = ...
QueryBuilder qb = em.getQueryBuilder();
CriteriaQuery<Person> c = qb.createQuery(Person.class);
Root<Person> p = c.from(Person.class);
Predicate condition = qb.gt(p.get(Person_.age), 20);
c.where(condition);
TypedQuery<Person> q = em.createQuery(c); 
List<Person> result = q.getResultList();

上記のスニペットの引き上げる、コンパイルエラー例:

Predicate condition = qb.gt(p.get(Person_.age, "xyz"));

まん Person_静電気、インスタンスが生成され、標準のメタモデルクラス に対応する独自の Person エンティティクラス(発生によるアノテーションのプロセッサー)で、強く型付けされた代替を実行時の反射光に基づくアプローチ:

Field field = Person.class.getField("age");

メリット:

  • 型安全、コンパイル時間検証!
    • ることを禁止して建設するクエリ構文上は間違っています。
    • めコンパイルエラー後のリファクタリング.
    • 提供の支援のための自動完了
  • より適した動的ます。

連結:

  • より詳細.
  • 下すことはないですね。

を感じて一般に快適JPQLのタイプの安全基準のAPIが大きな差JPQL(ともに、Hibernateの基準供している。

参照

関連する回答

他のヒント

JPA2.0基準APIジへのアクセスにはログインベースのAPI用の建物ます。だと思っていきの良い仕事ができる お持ちの場合 できるな 読みやすくするために としており

cq.select(...)
  .where(...)
  .orderBy(...)
  .groupBy(...);

を用いる場合 静的 クエリを使用。 外部化、読みや ファイル

<entity-mappings>
    ...
    <named-query name="ORDER">
       <query>
           <![CDATA[
               from
                   Order
           ]]>
       </query>
    </named-query>
    <named-query name="ORDER_WITH_LINE_ITEM">
       <query>
           <![CDATA[
               from
                   Order o
               inner join fetch 
                   o.lineItemList
           ]]>
       </query>
    </named-query>
    ...
</entity-mappings>

またモジュール化されたアで、アプリケーションの利用を一つのxmlファイルはそれぞれのモジュールとして以下の

br
   com
       ar
           moduleA
               model
                   repository
                       moduleA.xml
           moduleB
               model
                   repository
                       moduleB.xml               
           moduleC
               model
                   repository
                       moduleC.xml

そして定義するおmappinf-ファイルの要素

<mapping-file>br/com/ar/moduleA/model/repository/moduleA.xml</mapping-file>
<mapping-file>br/com/ar/moduleB/model/repository/moduleB.xml</mapping-file>
<mapping-file>br/com/ar/moduleC/model/repository/moduleC.xml</mapping-file>
あなたは、エンティティのメタモデルを生成する場合は、

JPA 2基準は、静的型付け形態で使用することができます。それは、より詳細なJPQLよりますが、静的に型付けされ、直接、動的なクエリの構築をサポートしています。

静的型付けクエリ言語の利点は、あなたがコンパイル時に多くのエラーをキャッチすることができますし、オートコンプリートを同様に使用することができるようにIDEが備えていることである。

私にとってはJPA2が輝く現実世界の例では、ユーザーからの入力に基づいてクエリを作成する必要がある場合です。私はどこつのパラメータを持つ、非常に単純な話ではないのです。あなたのアプリケーションの高度な検索オプションを作ったとき、私は意味します。特定のパラメータが満たされたときに参加する必要がひとつ。あなたは何が余分な結合と機能、パラメータの大規模なセットを含めるためにあなたのHQLやSQLを連結することはありません。カスタムSQLは、それが動作するか検証するために多くのテストが必要です。これはJPAに単純かもしれないのに対し、HQLとSQLに余分な検索オプションを追加すると、リワークの多くを必要とします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top