JPA @Query处理null参数值和%?1%

时间:2017-10-08 03:28:17

标签: java hibernate spring-data-jpa jpql

email

在我的情况下,这可以处理空值,但是当我没有空值@Query("select t from Menu t where (?1 is null or t.name like %?1%)")没有效果时,就无法进行模糊搜索。

我想要代码= 4并找到

4
546
345

但只能找到

4

任何帮助?

1 个答案:

答案 0 :(得分:0)

您尝试使用的功能已在ticket DATAJPA-292中引入 在评论中,您将找到导致问题的限制:

  

需要注意的是,对同一参数的引用只能配备相同的LIKE表达式。以下查询代码段无效:

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

因为我们只能绑定一个参数。

要解决该限制,您应该能够使用SpEL表达式。请尝试以下方法:

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

不是100%肯定,但我认为这应该也可以,因为它基本上将绑定实例视为单独的参数:

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