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

Does Hibernate HQL Support Regular expression pattern matching?

我正在测试使用 Hibernate 从我的数据库 (MySQL) 检索数据的不同方式。而且我了解到可以在 HQL 中使用 LIKE,就像我们在 SQL 中一样。但是当我尝试 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 运算符在基础休眠抽象 Dialect class 中声明。这就是 hibernate 知道它的方式。

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

public class YourDialect extends MySQL8Dialect {

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

然后在您的休眠配置中声明此方言,然后您将能够在 hql 查询中使用 REGEXP_LIKE 函数。