我想在spring数据jpa中使用regexp函数(在mysql中(
我尝试了三种在网上搜索的方法。
findByUriRegex
、findByUriMatches
、findByUriRegexMatches
Caused by: java.lang.IllegalArgumentException: Unsupported keyword REGEX (1): [MatchesRegex, Matches, Regex]
这些关键字在spring文档中,但不起作用。
- 寄存器函数
spring:
jpa:
database-platform: com.xxx.config.DBCustomDialect
class DBCustomDialect : MariaDB53Dialect() {
init {
registerFunction(
"REGEXP",
SQLFunctionTemplate(
StandardBasicTypes.BOOLEAN, "?1 REGEXP ?2"
)
)
}
}
class EntityRepository: JpaRepository<Entity, Long> {
@Query(value = "SELECT e FROM Entity e WHERE FUNCTION('REGEXP', e.uri, :regex)")
fun findBy(regex: String): List<Entity>
}
但验证失败,出现异常。
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: function (REGEXP) near line 1, column 102
我不知道我做错了什么
我该如何解决?
我找到了解决方案
您需要验证SQLFunctionTemplate
的返回类型。
@Query(value = "SELECT e FROM Entity e WHERE FUNCTION('REGEXP', e.uri, :regex)
->不起作用
@Query(value = "SELECT e FROM Entity e WHERE FUNCTION('REGEXP', e.uri, :regex = true)
->它工作于