2017-10-08 16 views
0

@Query("select t from Menu t where (?1 is null or t.name like %?1%)")JPA @query nullパラメータ値を処理し、私の場合は%のような?1%

するが、これはnull値を扱うことができますが、私はNULL値like %?1%には効果がないとき、実行する方法はありませんファジー検索。

私は= 4のコードを持っており、

 
4 
546 
345 

を見つけるだけ

 
4 

任意の助けを見つけたいですか?

+0

'@queryは("トンを選択する理由メニューtから(%?1%または?1のようなt.nameはヌルです) ")'は処理できますか? – shakira

+0

JPA APIに '@ Query'というものはありません。それがSPRINGアノテーションです!これはあなたが話しているJPQLです – DN1

答えて

0

使用しようとしている機能はticket DATAJPA-292 で導入されてしまったとコメントして、あなたはあなたに問題を引き起こしている制限を見つけることができます:注意すべき

ことの一つは、同じパラメータへの参照です非常に同じLIKE式しか装備できません。次のクエリスニペットは無効です。

… firstname like %?1 and lastname like ?1% 

1つのパラメータは1回だけバインドできます。

この制限を回避するには、SpEL式を使用する必要があります。 100%わからない

@Query("select t from Menu t where (?1 is null or t.name like ?#{'%'+[0]+'%'})") 

、私はそれが基本的に別々のパラメータとしてインスタンスをバインドするために考慮するため、これは同様に動作するはずだと思う:以下を試してみてください

@Query("select t from Menu t where (?1 is null or t.name like %?#{[0]}%)") 
関連する問題