2

休止状態 3.5 JPA 1.0

注釈 @OrderBy は、リスト フィールドの 1 対多または多対多の関係にのみ使用されます。しかし、テーブル内のいくつかのフィールドで順序付けする必要がある単一のテーブルに使用したいと考えています。可能です?または別の解決策?

例えば:

SELECT * FROM INTERCHANGE_KEYS order by PANEL_OPTION, KEY_NAME

テーブルごとに hql を書きたくありません。

4

1 に答える 1

1

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

于 2013-04-19T12:39:37.393 に答える