繁体   English   中英

Hibernate HQL 是否支持正则表达式模式匹配?

[英]Does Hibernate HQL Support Regular expression pattern matching?

我正在使用 Hibernate 测试从我的数据库 (MySQL) 中检索数据的不同方法。 我知道可以像在 SQL 中那样在 HQL 中使用LIKE 但是当我尝试REGEXP出现以下错误

Exception in thread "main" java.lang.IllegalArgumentException: 
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: REGEXP near line 1, column 54 [from com.jithin.hibernate.entity.Student where fname REGEXP '@gmail.com$']

我也尝试过不同的形式,如RLIKEREGEXP_LIKE 但错误是一样的。 那么为什么 HQL 支持LIKE运算符,为什么不支持REGEXP呢? 有没有办法实现它?

我使用的代码如下

session.beginTransaction();
List<Student> students = session.createQuery("from Student where email REGEXP 'gmnail.com$'"),getResultList();
session.getTransaction().commit();

LIKE运算符在基本的休眠抽象方言类中声明。 这就是 hibernate 了解它的方式。

例如,您可以通过以下方式扩展您的休眠方言:

public class YourDialect extends MySQL8Dialect {

   public YourDialect(){
      registerFunction(
          "REGEXP_LIKE",
           new StandardSQLFunction( "REGEXP_LIKE", StandardBasicTypes.INTEGER )
      );
   }
}

然后在你的休眠配置中声明这个方言,然后你就可以在 hql 查询中使用REGEXP_LIKE函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM