18

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

私が間違っていることについて何か考えはありますか?ありがとう!

4

4 に答える 4

22

「ASC」または「DESC」をクエリ パラメータにすることはできません。代わりに文字列連結を使用できます。

query = "SELECT c FROM item ORDER BY c.name " + sortOrder;

sortOrderの内容はASC または DESC のみであり、ユーザーから直接取得されたものではないことを検証する必要があります。

于 2010-09-01T08:34:10.437 に答える
7

ここで名前付きクエリを使用する場合は、そのうちの 2 つが必要です (名前付きクエリは静的であり、@Mark で指摘されているように、パラメーターとして ASC と DESC を使用することはできません)。

于 2010-09-01T10:53:42.307 に答える
5

「order by」句を含む名前付きクエリを 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;
}
于 2011-11-09T08:35:01.147 に答える