[英]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$']
我也尝试过不同的形式,如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
运算符在基本的休眠抽象方言类中声明。 这就是 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.