【问题标题】:JPA Criteria builder for logical operator OR逻辑运算符 OR 的 JPA 标准构建器
【发布时间】:2014-07-28 06:19:15
【问题描述】:

我需要动态准备一个查询,如下所示,我在不同的列表中获取组列,在不同的列表中获取主列, 有人可以帮我吗?

    SELECT * FROM TABLE WHERE COLUMN_A =1 ? OR (COLUMN_B='A' AND COLUMN_B='Z')

Java 代码:

    CriteriaBuilder builder;
    List<Predicate> predicates = new ArrayList<Predicate>();
    List<Predicate> innerPredicates = new ArrayList<Predicate>();
    List<Predicate> outerPredicates = new ArrayList<Predicate>();

    for(GroupClause gc : list.getGroupClause()){
        List<Predicate> groupPredicates = new ArrayList<Predicate>();
        groupPredicates.add(gc.getColumnB());

        if(groupPredicates!=null && groupPredicates.size()>0){
            innerPredicates.add(builder.and(groupPredicates.toArray(new Predicate[groupPredicates.size()])));
        }
    }

    if(outerPredicates.size()>0){
        predicates.add(builder.or(outerPredicates.toArray(new Predicate[outerPredicates.size()])));
        predicates.add(builder.or(innerPredicates.toArray(new Predicate[innerPredicates.size()])));
    }

上面代码的put是

    SELECT * FROM TABLE WHERE COLUMN_A =1 ? AND COLUMN_B='A' AND COLUMN_B='Z'

【问题讨论】:

  • 我真的不明白你的代码试图实现什么。我没有看到任何将列与值 1 或值“A”和“Z”进行比较的代码。我看到您尝试创建一个“分组依据”,然后还“和”将分组依据列一起创建(这没有意义)。根据你自己也不明白到底出了什么问题。

标签: jpa criteria-api


【解决方案1】:

这里使用简单的标准是示例

public List<TABLE> getTABLE () {

        Criteria tableCriteria= session.createCriteria(TABLE.class);
        tableCriteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
         tableCriteria.add(Restrictions.and(Restrictions.eq("COLUMN_A",1),Restrictions.or(Restrictions.eq("COLUMN_B","A"),
               Restrictions.eq("COLUMN_B","Z")))


        return tableCriteria.list();
    }

【讨论】:

  • 问题是关于 JPA 标准构建器,而不是 Hibernate Criteria。它们是不同的东西。
  • 那为什么他的问题中有标签为休眠?
  • @perissf 我为 Hibernate 提供了答案,因为他在他的问题中标记了 hibernate
  • 我将删除休眠标签,但如果有人有标准构建器的解决方案,那就太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多