我最近将我的代码从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 '\'
我有一大堆的解决方法,但我想知道是否有一个配置我错过了,因为我非常想避免这个错误蔓延,并回到一个存储库方法只用于一个被遗忘的边缘情况:)
非常感谢
1条答案
按热度按时间von4xj4u1#
找到问题了。它既不与Spring也不与Hibernate相关联。
我的代码中有对
io.hypersistence:hypersistence-utils-hibernate-62:3.5.0
的依赖。将此依赖项升级到最新的次要版本3.5.2
修复了该问题需要注意的是,它只在使用Spring data
Containing
(或alternative)关键字时才会出现。