【问题标题】:Does Hibernate HQL Support Regular expression pattern matching?Hibernate HQL 是否支持正则表达式模式匹配?
【发布时间】:2021-02-13 07:05:03
【问题描述】:

我正在测试使用 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();

【问题讨论】:

  • 您好,请编辑您的问题并将截图替换为实际代码sn-p。
  • @AlexRudenko 完成

标签: java mysql sql hibernate hql


【解决方案1】:

LIKE 运算符在基本休眠抽象 Dialect 类中声明。这是hibernate知道的。

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

public class YourDialect extends MySQL8Dialect {

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

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

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多