Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex EclipseLink正则表达式?_Regex_Database_Jpa_Eclipselink - Fatal编程技术网

Regex EclipseLink正则表达式?

Regex EclipseLink正则表达式?,regex,database,jpa,eclipselink,Regex,Database,Jpa,Eclipselink,我必须根据列值上的正则表达式从数据库中搜索记录。我使用JPA实现持久化,JPA中不支持REGEXP,我在谷歌上搜索了它,知道EclipseLink支持REGEXP,我知道这是一种对可移植性的妥协,但我没有任何出路 我想问以下关于EclipseLink REGEXP支持的问题- 如何使用EclipseLink支持的REGEXP 在什么情况下可以保证对REGEXP的支持 如果不保证,故障时的行为是什么 提前感谢表达式的EclipseLink文档可在此处找到: 你可以查看博客帖子 其中列出了一些支持

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

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

  • 如何使用EclipseLink支持的REGEXP
  • 在什么情况下可以保证对REGEXP的支持
  • 如果不保证,故障时的行为是什么

  • 提前感谢

    表达式的EclipseLink文档可在此处找到:

    你可以查看博客帖子
    其中列出了一些支持REGEXP的数据库,但归根结底是数据库。EclipseLink将发出SQL,由数据库来处理和控制行为。如果不能,它可能会抛出一个异常,说明SQL中存在错误。有关REGEXP如何工作的详细信息,请查看数据库文档。

    祝您愉快。您还可以使用CriteriaBuilderAPI。 这是一个您将搜索很长时间的解决方案:)

    CriteriaBuilder cb=entityManager.getCriteriaBuilder();
    CriteriaQuery=cb.createQuery(…);
    Root=query.from(…);
    列表谓词=新的ArrayList();
    // 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=ecb.toExpression(root.get(“field”)).regexp(“某些regexp表达式”);
    列表
    
      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()]));