如何在弹簧数据jpa中注册'regexp'函数?



我想在spring数据jpa中使用regexp函数(在mysql中(
我尝试了三种在网上搜索的方法。

  1. findByUriRegexfindByUriMatchesfindByUriRegexMatches
Caused by: java.lang.IllegalArgumentException: Unsupported keyword REGEX (1): [MatchesRegex, Matches, Regex]

这些关键字在spring文档中,但不起作用。

  1. 寄存器函数
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)

->它工作于

最新更新