【问题标题】:JPA @Query to handle null parameter value and like %?1%JPA @Query 处理空参数值,例如 %?1%
【发布时间】:2018-03-19 12:43:23
【问题描述】:

@Query("select t from Menu t where (?1 is null or t.name like %?1%)")

在我的情况下,这可以处理空值,但是当我没有空值like %?1%没有效果时,没有办法进行模糊搜索。

我想要code=4并找到

4 546 345

但只能找到

4

有什么帮助吗?

【问题讨论】:

  • 为什么@Query("select t from Menu t where (t.name like %?1% or ?1 is null)")可以处理???
  • JPA API 中没有@Query 这样的东西。那是一个 SPRING 注释!这是你说的JPQL

标签: java hibernate spring-data-jpa jpql


【解决方案1】:

您尝试使用的功能是通过ticket DATAJPA-292 引入的 在 cmets 中,您会发现给您带来问题的限制:

需要注意的一点是,对相同参数的引用只能配备完全相同的 LIKE 表达式。以下查询 sn -p 无效:

… 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]}%)")

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 2021-11-13
    • 2020-07-19
    • 1970-01-01
    • 2021-06-27
    • 2017-09-19
    • 1970-01-01
    相关资源
    最近更新 更多