我正在尝试使用H2内存数据库上的MySQL 5.7数据库中的REGEXP
函数来运行JPQL。我想使用相同的查询进行集成测试。
由于H2上不存在REGEXP
函数,因此我尝试使用REGEXP_LIKE
H2函数注册一个新函数以使其起作用(仅用于测试)。>
我的查询是:
String sql = "select o1.id from order o1 where :url REGEXP o1.regex";
但是我无法找出正确的语法来注册该功能。我正在尝试下面的操作,但是我仍然知道这是不正确的,因为我发现的所有示例都在映射带有参数的“正常”函数,但是REGEXP使用的语法类似于
:url REGEXP o1.regex
而不是REGEXP(:url, o1.regex)
:
public class MyH2Dialect extends H2Dialect { public MyH2Dialect() { super(); registerFunction("REGEXP", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN, "REGEXP_LIKE(?1, ?2, 'i')")); } }
自然,JPQL无法识别该功能:
原因:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:REGEXP
我想我需要做这样的事情(伪代码:):
registerFunction("?1 REGEXP ?2", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN, "REGEXP_LIKE(?1, ?2, 'i')"));
有什么想法吗?
我正在尝试使用H2内存数据库上的MySQL 5.7数据库中的REGEXP函数使JPQL运行。我想使用相同的查询进行集成测试。由于REGEXP函数不...
我正在尝试使用H2内存数据库上的MySQL 5.7数据库中的REGEXP函数使JPQL运行。