Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
Hibernate 休眠条件限制和/或组合_Hibernate_Criteria_Hibernate Criteria_Restrictions - Fatal编程技术网

Hibernate 休眠条件限制和/或组合

Hibernate 休眠条件限制和/或组合,hibernate,criteria,hibernate-criteria,restrictions,Hibernate,Criteria,Hibernate Criteria,Restrictions,我如何使用Hibernate限制实现这一点 (((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z'))) 认为有效 Criteria criteria = getSession().createCriteria(clazz); Criterion rest1= Restrictions.and(Restrictions.eq(A, "X"), Restrictions.in("B", Arrays.asList("X",

我如何使用Hibernate限制实现这一点

(((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z')))
认为有效

Criteria criteria = getSession().createCriteria(clazz); 
Criterion rest1= Restrictions.and(Restrictions.eq(A, "X"), 
           Restrictions.in("B", Arrays.asList("X",Y)));
Criterion rest2= Restrictions.and(Restrictions.eq(A, "Y"), 
           Restrictions.eq(B, "Z"));
criteria.add(Restrictions.or(rest1, rest2));

对于自Hibernate 5.2版以来的新标准:

CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
CriteriaQuery<SomeClass> criteriaQuery = criteriaBuilder.createQuery(SomeClass.class);

Root<SomeClass> root = criteriaQuery.from(SomeClass.class);

Path<Object> expressionA = root.get("A");
Path<Object> expressionB = root.get("B");

Predicate predicateAEqualX = criteriaBuilder.equal(expressionA, "X");
Predicate predicateBInXY = expressionB.in("X",Y);
Predicate predicateLeft = criteriaBuilder.and(predicateAEqualX, predicateBInXY);

Predicate predicateAEqualY = criteriaBuilder.equal(expressionA, Y);
Predicate predicateBEqualZ = criteriaBuilder.equal(expressionB, "Z");
Predicate predicateRight = criteriaBuilder.and(predicateAEqualY, predicateBEqualZ);

Predicate predicateResult = criteriaBuilder.or(predicateLeft, predicateRight);

criteriaQuery
        .select(root)
        .where(predicateResult);

List<SomeClass> list = getSession()
        .createQuery(criteriaQuery)
        .getResultList();  
CriteriaBuilder-CriteriaBuilder=getSession().getCriteriaBuilder();
CriteriaQuery CriteriaQuery=criteriaBuilder.createQuery(SomeClass.class);
Root=criteriaQuery.from(SomeClass.class);
路径表达式A=root.get(“A”);
路径表达式B=root.get(“B”);
谓词谓词predicateAEqualX=criteriaBuilder.equal(表达式A,“X”);
谓词predicateBInXY=expressionB.in(“X”,Y);
谓词PredicateEleft=criteriaBuilder.and(predicateAEqualX,predicateBInXY);
谓词predicateAEqualY=criteriaBuilder.equal(表达式A,Y);
谓词谓词predicateBEqualZ=criteriaBuilder.equal(表达式b,“Z”);
谓词predicateRight=criteriaBuilder.and(谓词相等,谓词相等);
谓词predicateResult=criteriaBuilder.or(predicateLeft,predicateRight);
标准查询
.选择(根目录)
.where(谓词结果);
List=getSession()
.createQuery(criteriaQuery)
.getResultList();