休止状態 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 レイヤー クラスの標準実装がいくつかあります)。