2017-11-01 13 views
0

私は、次のリポジトリのコードを持っている:春データJPAカスタム条件@query SQLで

 @Query("SELECT " + FIELDS + " FROM Session ssn WHERE " 
     + "(ssn.startDate BETWEEN :startDate AND :endDate) AND endDate IS  
:closed ? NOT : '' NULL ") 
     List<Session> findByDateAndStatus(@Param("startDate)Date startDate,@Param("endDate")Date endDate,@Param("closed")Boolean closed); 

このコードは動作しません。私は、このクエリが閉じられたセッションを取得するか、提供されたブール値のパラメータに基づいてセッションを開けたがっています。

"AND endDate IS :closed ? NOT : '' NULL " 

カスタムブール値パラメータに基づいてHQL文字列を作成したいとします。どうやってするか?

+0

。クエリは何をすべきですか? –

+0

ありがとうございます。このクエスチョンは、booleanパラメータに基づいて開かれたセッションまたは閉じられたセッションをフェッチする必要があります。 – avalon

+0

私はあなたがこの醜いブール引数の代わりに2つのクエリを持つべきであるという気持ちがあります。実際には単一のクエリが必要な場合は、((:closed = trueおよびssn.endateがnullでない)または(:closed = falseおよびssn.enddateがnull)) ' –

答えて

0

これがうまくいかない理由は、HQLとJava構文を混在させるためです。代わりに、HQL(またはJPQL)構文を使用して、バインド値と適切に比較できる値を取得する必要があります。このような何か作業をする必要があります:

... AND CASE WHEN (endDate IS NULL) THEN FALSE ELSE TRUE = :closed 

も参照してください:How can I test a boolean parameter in a NamedQuery with JPA?Is there such thing CASE expression in JPQL?有効なHQLではありません