8

クラスで注文するJPA基準クエリを使用する方法はありますか? 次のドメイン オブジェクトを想像してください。

abstract class Hobby { ... }
class Coding extends Hobby { ... }
class Gaming extends Hobby { ... }

私ができた通常のQLを使用して

from Hobby h order by h.class

しかし、条件クエリに同じロジックを適用すると、実行時例外「不明な属性」が発生します。

CriteriaQuery<Hobby> criteriaQuery = builder.createQuery(Hobby.class);
Root<Hobby> hobbyRoot = criteriaQuery.from(Hobby.class);
criteriaQuery.orderBy(builder.asc(hobbyRoot.get("class"));
List<Hobby> hobbies = entityManager.createQuery(criteriaQuery).getResultList();

使用される JPA 実装: Hibernate-EntityManager v3.5.5-Final

4

1 に答える 1

10

TYPEJPA 2.0 では、クエリがクラス タイプに基づいて結果を制限できるようにする新しい式が導入されています。

を使用して、Criteria API で型式を使用できますPath#type()。だからあなたは試すことができます:

CriteriaQuery criteriaQuery = builder.createQuery(Hobby.class);
Root hobbyRoot = criteriaQuery.from(Hobby.class);
criteriaQuery.orderBy(builder.asc(hobbyRoot.type());
List hobbies = entityManager.createQuery(criteriaQuery).getResultList();

このコードはコンパイルされますが、テストはしませんでした (明日試してみます)。

実際、これが合法なのか、それともそれtype()を選択するために選択の一部であるべきなのか疑問に思いますorder by(おそらく、それは基準クエリが生成するはずのものです)。それを確認する必要があります。

参考文献

  • JPA 2.0 仕様
    • 4.6.17.4項「エンティティ型式」

その他のリソース

于 2010-11-16T00:07:26.197 に答える