休止状態 3.5 JPA 1.0
注釈 @OrderBy は、リスト フィールドの 1 対多または多対多の関係にのみ使用されます。しかし、テーブル内のいくつかのフィールドで順序付けする必要がある単一のテーブルに使用したいと考えています。可能です?または別の解決策?
例えば:
SELECT * FROM INTERCHANGE_KEYS order by PANEL_OPTION, KEY_NAME
テーブルごとに hql を書きたくありません。
JPA エンティティで使用するすべての一般的なアクションのインターフェイスを作成できます。このインターフェイスには 2 つのジェネリックが必要です。2 つのアクション (persist と findAll) の例を示しますが、他のすべて (merge、delete、find など) も実装できます。例えば:
パブリック インターフェイス JpaDaoBase {
public void persist(E e);
public List findAll(String orderProperty, OrderType orderType);
}
E クラスは JPA エンティティである必要があり、K は主キーに使用されるプロパティの Java タイプを表します (例: Long)。
そしてインターフェースの実装:
パブリック抽象クラス JpaDaoBaseImpl は JpaDaoBase を実装します {
保護されたクラスのentityClass;
public JpaDaoBaseImpl() {
this.entityClass = (クラス) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
@オーバーライド
public void persist(E e) {
entityManager.persist(e);
}
@オーバーライド
public List findAll(String orderProperty, OrderType orderType) {
return entityManager.createQuery(
"から選択する " + entityClass.getName() + " o orderby "
orderProperty + + " " + orderType.toString(), entityClass)
.getResultList();
}
}
その後、エンティティ Example の場合、JpaDaoBaseImpl を拡張して DAO ExampleDao の実装を作成し、この 2 つのメソッドをすぐに実装できるようにします。
これは、JPA (Hiberante) プロジェクトで DAO レイヤーを作成する標準的な方法です。Spring を使用する場合は、Spring Data JPAプロジェクトを使用できます (Dao レイヤー クラスの標準実装がいくつかあります)。