首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EclipseLink REGEXP?

EclipseLink REGEXP?
EN

Stack Overflow用户
提问于 2013-10-25 09:39:42
回答 2查看 778关注 0票数 1

我必须根据列值上的正则表达式从数据库中搜索记录。我使用JPA作为持久化的,在JPA中不支持REGEXP,我在googled上搜索了它,并了解到EclipseLink支持REGEXP,我知道这是对可移植性的妥协,但我没有任何出路。

我想问以下关于EclipseLink REGEXP支持的问题-

  1. 如何使用EclipseLink支持的REGEXP
  2. 在何种情况下可以保证对REGEXP的支持
  3. 如果不能保证失败的行为是什么

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-25 15:27:10

表达式的EclipseLink文档可以在这里找到:http://www.eclipse.org/eclipselink/api/2.4/org/eclipse/persistence/expressions/Expression.html#regexp(java.lang.String)

您还可以查看博客文章http://java-persistence-performance.blogspot.com/2012/05/jpql-vs-sql-have-both-with-eclipselink.html,其中列出了一些支持REGEXP的数据库,但这可以归结为数据库。EclipseLink将发出SQL,并由数据库来处理它并控制行为。如果不能,它可能会抛出一个异常,说明SQL中有错误。有关REGEXP如何工作的详细信息,请检查数据库文档。

票数 0
EN

Stack Overflow用户

发布于 2017-12-01 09:28:57

日安。此外,您还可以使用CriteriaBuilder api。以下是您将在很长时间内搜索的解决方案:)

代码语言:javascript
复制
  CriteriaBuilder cb = entityManager.getCriteriaBuilder();
  CriteriaQuery<?> query = cb.createQuery(...);
  Root root = query.from(...);

  List<Predicate> predicates = new ArrayList<Predicate>();

  // https://www.eclipse.org/forums/index.php/t/831290/
  if (cb instanceof org.eclipse.persistence.jpa.JpaCriteriaBuilder) {
    org.eclipse.persistence.jpa.JpaCriteriaBuilder ecb = (org.eclipse.persistence.jpa.JpaCriteriaBuilder) cb;
    org.eclipse.persistence.expressions.Expression exp = ecb.toExpression(root.get("field")).regexp("some regexp expression");

    List<Expression<?>> parentExps = Collections.emptyList();
    Predicate regExp = new org.eclipse.persistence.internal.jpa.querydef.PredicateImpl(entityManager.getMetamodel(), exp, parentExps, Predicate.BooleanOperator.AND);
    predicates.add(regExp);
  }
  else { ... some other solution }

  query.where(predicates.toArray(new Predicate[predicates.size()]));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19586290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档