2010-11-19 13 views
2

実行時にJPA NamedクエリにOrderBy句を追加することはできますか? 「は、メタデータで表現静的クエリですれるJava Persistenceクエリ言語で名前付きクエリを指定するために使用されるクエリ名が永続ユニットにスコープされています。」:のJava EE 5ドキュメントから名前付きクエリにOrderBy句を追加する

答えて

2

名前クエリは永続プロバイダによって処理されます。実行時に動的に名前付き問合せを変更/変更/追加することはできません。

JPA 2.0を使用しており、実行時に高性能な動的クエリを実行する方法が必要な場合は、Criteria APIを調べる必要があります。

+0

実行時に名前付きクエリを動的に呼び出す "ことができますが、これは生成された基本SQLでは当てはまりません。たとえば、setMaxResults()またはsetFirstResult()を呼び出すときについて考えてみましょう。実際のクエリを変更するには、limitとoffset句をいくつか追加します。これは、NamedQueryとdbmsのコンパイルされたクエリとの間に厳密な依存関係がないことを伝えるためのものです。 – Jack

1

静的なので、&実行時にクエリを変更することはできません。 代わりにカスタムクエリを使用するか、注文要素が固定されている場合はアノテーションを使用できます。

フィールド:

@OrderBy(value="nickname") 
List<Person> friends; 

方法:のEntityManagerFactoryが作成されるとき

@OrderBy("nickname ASC") 
public List<Person> getFriends() {...}; 
0

名前付きクエリにorder-by句を追加できない場合でも、パラメトリックorderByを指定できます。以下は、完全に有効なクエリです:

SELECT u FROM User u ORDER BY :orderBy 

そして、あなたのようなものを注文変更しようとしている:あなたが/変更/修正については何も追加することができない」というのは本当ですが

query.setParameter("orderBy", "id"); 
関連する問題