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

标签 java sql oracle hibernate hql

我正在使用 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/

相关文章:

Oracle Weblogic OAM 使用 session cookie 获取用户信息

java - "javac -version"抛出 Unsupported major.minor version 52.0,我的符号链接(symbolic link)不正确吗?

sql - 如何截断 MySQL 数据库中的所有表?

sql - DBCC DBREINDEX ('?' 、 ' ' 、 80) 是做什么的?

php - 从 SQL select sum group by 到 Yii 框架中的 Active Record 2

sql - 如何将逗号分隔的值转换为oracle中的行?

oracle - 在 CLOB 列上创建索引

java - replaceAll,如何改变字母

java - 如何将友好号码搜索的实现从命令式转变为功能性?

java - 使用 Luhn 算法检查信用卡有效性