質問

私は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")));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top