【问题标题】:Spring @Query with Lower and Wildcards带有较低和通配符的 Spring @Query
【发布时间】:2017-08-21 04:18:50
【问题描述】:

此问题涉及 Spring Data JPA。

我需要一个(本机)@Query,它具有较低的函数和通配符。 但我没有让它工作。

这是我正在寻找的过于简化的版本:

@Query(value = "SELECT * FROM CAR c WHERE LOWER(c.model) LIKE LOWER(%:model%)", nativeQuery = true)
List<Car> findByModelMatching( @Param("model") String model );

LOWER(%:model%) -> 不工作! LOWER(:model) -> 有效!

我知道这样的查询可以很容易地重写为:

List<Car> findByModelContainingIgnoreCase( String model );

但我不是在寻找命名查询。

我的问题是:如何在 @Query 中将 LOWER(甚至 UPPER)与通配符结合起来!

干杯

【问题讨论】:

    标签: java sql spring spring-data-jpa wildcard


    【解决方案1】:

    LOWER 函数接受字符串,例如,如果你在 Oracle 上,你应该写 LOWER('%' || :model || '%')

    【讨论】:

    • 感谢 galovics!像魅力一样工作!
    • 很高兴能帮上忙。请接受答案,因为其他人可能会从中受益。
    • AND lower(a.lastName) LIKE lower(concat('%',:lastName,'%')) 为我工作。生成的查询与@galovics 推荐的相同
    • 这也适用于 MySQL/MariaDB。解决 Spring 或 Hibernate 中的一个新错误的好方法,其中 %:model% 曾经有效。
    猜你喜欢
    • 2017-05-05
    • 2016-07-05
    • 2013-08-25
    • 1970-01-01
    • 2011-04-30
    • 2011-08-22
    • 2016-11-15
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多