我正在使用 oracle 10g
和 hibernate 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/