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$']
我也试过RLIKE
和REGEXP_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
函数。
我正在测试使用 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$']
我也试过RLIKE
和REGEXP_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
函数。