パラメータとJPQL ORDER BY句
-
26-09-2019 - |
質問
私はORDER BY句でJPQLクエリを記述しようとしています:
query = "SELECT c FROM item ORDER BY c.name ASC"
私は、その値が「ASC」または「DESC」のどちらかだろう「秩序」パラメータを、設定したいです
query = "SELECT c FROM item ORDER BY c.name :order"
そして、私の実装でます:
query.setParameter("order", "ASC");
私はHibernateのエラーを取得するときには、次のとおりです。
org.hibernate.HibernateException: Errors in named queries
私が間違ってやっている上の任意のアイデア?ありがとう!
解決
「ASC」または「DESCは、」クエリパラメータにすることはできません。代わりに、文字列の連結を使用することができます。
query = "SELECT c FROM item ORDER BY c.name " + sortOrder;
あなたはsortOrder
の内容だけでASCまたはDESCすることができ、ユーザーから直接来ていないことを検証する必要があります。
他のヒント
あなたはここに名前付きクエリを使用したい場合は、
、あなたは(名前付きクエリは静的であり、あなたは、@マークで尖ったアウトなどのパラメータとしてASCとDESCを使用することはできません)それらのうちの2つを必要と思います。
の代わりにクエリ句「によって順序」を含む名前の二回の書き込みでは、あなたのDAOこの方法を実装することができます
public List<MyEntity> findByAttribute(boolean desc,...){
TypedQuery<MyEntity> q = em.createNamedQuery(...
q.setParameter(...
List<MyEntity> result = q.getResultList();
if(desc){
Collections.reverse(result );
}
return result;
}
私は、正しい方法は、基準APIのBY句 ORDERを使用していると仮定します
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Country> q = cb.createQuery(Country.class);
Root<Country> c = q.from(Country.class);
q.select(c);
q.orderBy(cb.asc(c.get("currency")), cb.desc(c.get("population")));
所属していません StackOverflow