为什么Spring JPA在与PostgreSQL一起使用时不在转义字符周围添加引号?

ftf50wuq  于 2023-10-16  发布在  Spring
关注(0)|答案(1)|浏览(125)

我最近将我的代码从Sping Boot 2.7迁移到Sping Boot 3.1,我遇到了一个Spring Data JPA Repository的特定方法的问题,该方法用于在我的数据库中按名称搜索特定用户。
下面是代码(在Kotlin中):

interface UserRepository : JpaRepository<UserEntity, String>{

   fun findByFirstNameContainingIgnoreCaseOrNameContainingIgnoreCase(
        firstNameSearchTerm: String,
        nameSearchTerm: String,
    ): List<UserEntity>

下面是生成的SQL:

select
    u1_0.id,
    u1_0.first_name,
    u1_0.name
from
    users u1_0
where upper(u1_0.first_name) like upper(?) escape \
or upper(u1_0.name) like upper(?) escape \

这里是错误:

2023-10-02T12:16:06.997+02:00  WARN 98232 --- [nio-9595-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42601
2023-10-02T12:16:07.310+02:00 ERROR 98232 --- [nio-9595-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: syntax error at or near "\"

如果复制代码并尝试在我的客户端中执行它,我会得到同样的错误。我可以通过将\字符放在引号之间来修复它,就像这样。

select
    u1_0.id,
    u1_0.first_name,
    u1_0.name
from
    users u1_0
where upper(u1_0.first_name) like upper(?) escape '\'
or upper(u1_0.name) like upper(?) escape '\'

我有一大堆的解决方法,但我想知道是否有一个配置我错过了,因为我非常想避免这个错误蔓延,并回到一个存储库方法只用于一个被遗忘的边缘情况:)
非常感谢

von4xj4u

von4xj4u1#

找到问题了。它既不与Spring也不与Hibernate相关联。
我的代码中有对io.hypersistence:hypersistence-utils-hibernate-62:3.5.0的依赖。将此依赖项升级到最新的次要版本3.5.2修复了该问题
需要注意的是,它只在使用Spring data Containing(或alternative)关键字时才会出现。

相关问题