gpt4 book ai didi

java - 如何在 Hibernate HQL 中使用 Oracle 的 regexp_like?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:29 25 4
gpt4 key购买 nike

我正在使用 oracle 10ghibernate 3.3.2。以前在sql中用过正则表达式,现在第一次在HQL中使用。

Query query = getSession().createQuery("From Company company 
where company.id!=:companyId and
regexp_like(upper(rtrim(ltrim(company.num))), '^0*514619915$' )");

这是我的 hql,当我在没有 regex_like 函数的情况下运行它时,它会按预期运行。但是我无法使用 regex_like 表达式来执行它。

它说..

nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: ( near line 1, column 66.....

请帮忙,如何在 hibernate native 查询中使用 regex_like?或者其他一些替代方法。

最佳答案

实际上,您无法将 REGEXP_LIKE 的结果与除 PL/SQL 中的条件语句之外的任何内容进行比较。

Hibernate 似乎不接受没有 returnType 的自定义函数,因为您总是需要将输出与某些东西进行比较,即:

REGEXP_LIKE('bananas', 'a', 'i') = 1

由于 Oracle 不允许您将此函数的结果与空值进行比较,我想出了一个使用 case 条件的解决方案:

public class Oracle10gExtendedDialect extends Oracle10gDialect {

public Oracle10gExtendedDialect() {
super();
registerFunction(
"regexp_like", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN,
"(case when (regexp_like(?1, ?2, ?3)) then 1 else 0 end)")
);
}

}

你的 HQL 应该是这样的:

REGEXP_LIKE('bananas', 'a', 'i') = 1

它会起作用:)

关于java - 如何在 Hibernate HQL 中使用 Oracle 的 regexp_like?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11793159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com