2010-11-23 26 views
7

私は複数のNamedQueryが定義されており、ソートしたいフィールドごとにユニークなNamedQueryを作成せずに、エンティティのフィールドを動的にソートできるようにしたいと考えています。例:NamedQueryを動的にソートする? Seam/Hibernate/JPA

フィールド 'a'、 'b'、 'c'を持つMyObjectというエンティティがあります。私のベースクエリは "SELECT DISTINCT o FROM MyObject o"ですが、ORDER BY句をクエリに追加できます。私はその後、私は上の並べ替えしたいとフィールド(A、B、C)を指定します

SELECT DISTINCT o FROM MyObject o ORDER BY :order 

:理想的には、私は私のクエリは次のようになり、名前付きパラメータ、のような何かをすることができると思います。 Seam/Hibernate/JPAを使用してこれを達成する方法はありますか?これに取り組むためのより良い戦略はありますか?

+1

この質問は、[Hibernate named parameter by order by](http://stackoverflow.com/questions/4120388/hibernate-named-query-order-by-partameter)に関するものです。多分対応する答えはあなたを助けます。 – kraftan

答えて

5

実行時に名前付きクエリを変更することはできません。

// -----編集部構成

public void getOrders(String orderByElement){ 

    String query = "SELECT DISTINCT o FROM MyObject o ORDER BY " + orderByElement; 

    entityManager.createQuery(query).getResultList(); 
} 

そのJPAの特定。

+0

これはまさに私が探していたものです。しかし、私がJPA @ NamedQueryとして指定した場合、あなたが提供したクエリは機能しますか?または、entityManager.createQueryで作成した場合にのみ動作しますか?それができない理由を考えることはできませんが、確かにしたいだけです。 – Shadowman

+0

私はこのソリューションが動作するとは思わない。 [JPQL言語リファレンス](http://download.oracle.com/docs/cd/E11035_01/kodo41/full/html/ejb3_langref.html#ejb3_langref_input_params)によると、入力パラメータは 'WHERE'と' HAVING'でのみ許可されています節。あなたはそのクエリを試しましたか? – kraftan

+0

それに応じて私の答えを編集しました。 –

関連する問題