エンティティありますユーザー
と
@NamedQuery(名前= "Users.findAll"、クエリ=「ユーザーからのuをuのを選択します「)
このようにそれを使用します。
Query query = em.createNamedQuery("Technologies.findByIsActive", Technologies.class);
query.setFirstResult(technologiesTableModel.getLowItemIndex());
query.setMaxResults(technologiesTableModel.getPageRange().intValue());
List<Technologies> technologies = query.setParameter("isActive", 'Y').getResultList();
しかし、この結果の動的な並べ替えをしたいと思います。私は一つのの文字列を持っています。このフィールドには、並べ替える列の名前(フィールドの内容は要求から来ています)が含まれています。どのように私はフィールドと方向ごとに新しいクエリを使用せずにそれを行うことができます(フィールド名を持つ直接追加order by節なしで)安全な型を入力します。
私の研究ショーの提案は(私は、エンティティ上で定義されたNamedQueryを使用しての例を発見したことはできません)CriteriaQueryを使用するように、TypedQuery(私だけsetFirstResultメソッドとはsetMaxResultsで、発注して例を発見したことはできません。しかし、私は並べ替えとページネーションの両方が必要です)またはJpaRepository(私は良い説明で完全な実装された例を見つけることができません)。私が欲しい
は、フィールドの名前で自分のデータをソートする(私は文字列のように持っていること)、その後、それ(とsetFirstResultメソッドとはsetMaxResults)をページングすることです。私は(エンティティクラス宣言で)定義したNamedQueryで行い、はフライでクエリを定義しないか、ストリングの連結でクエリの最後にクエリを追加しません。
EDIT:
私に必要なのは、これが(すべてのグッドプラクティスで)実装する必要がどのように良い説明です。私はそれをどうやって行うのか考えていませんでした。私がしようすべては次のとおりです。
- 私のクエリは一つの場所にあると
- 文字列の連結は、クエリを作成することをお勧めではありません(それらのほとんど)。
ERRMは、あなたが(ない動的)静的クエリ文字列を定義します。 CriteriaまたはJPQLはどちらも実行時にクエリを定義することをサポートします。どんなJPAドキュメントでもそれが表示されます。 http://www.datanucleus.org/products/accessplatform_5_1/jpa/query.html#_criteria_api_ordering –
名前付きクエリは、動的ではありません。このトピックについて見てみましょうhttps://stackoverflow.com/questions/22167730/dynamic-named-query-in-entity-class-using-jpql-example基準またはSQLを使用します。 JPA criteria APIが一番いいわけではないので、QueryDSLはオプションでもHibernate APIでもかまいません。 – matthias
そして、そのJPAプロバイダを使用していない場合、または移植性(つまり、sane)を望んでいる場合、Hibernate APIには行きません –