そのう現実の世界に例がJPA2基準APIがより好ましい?
質問
うで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に余分な検索オプションを追加すると、リワークの多くを必要とします。