如何从带有方法前后参数的函数中注册方言的函数?

问题描述 投票:0回答:1

我正在尝试使用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函数不...

java mysql hibernate h2 jpql
1个回答
0
投票

我正在尝试使用H2内存数据库上的MySQL 5.7数据库中的REGEXP函数使JPQL运行。

© www.soinside.com 2019 - 2024. All rights reserved.