我的数据库中有三个表,一个学生,一个Classe和一个Assignement.POJO如下:
Student{
Classe currentClasse;
Set<Assignement> assignements;
}
Classe{
Set<Assignement> assignements;
SchoolYear schoolYear;
}
Assignement{
Classe classe;
Student student;
Boolean pass;
}
Run Code Online (Sandbox Code Playgroud)
基本上,学生有一个当前的班级和一个分配清单(他被分配到的所有班级).
我的问题是,在hibernate下,我想知道所有没有classe(is null)OR的学生被分配到属于schoolyear"1"的类但是已经pass设置为true
我设法制作了两个单独的标准来获得我想要的东西:
session.createCriteria(Student.class)
.add(Restrictions.isNull("classeActuelle"))
Run Code Online (Sandbox Code Playgroud)
和
session.createCriteria(Student.class)
.createAlias("assignements", "a")
.add(Restrictions.eq("a.pass", Boolean.TRUE)
.createAlias("a.classe","c")
.add(Restrictions.eq("c.schoolYear", "1"))
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将这两个标准"联合"起来或......
acd*_*ior 11
如果要创建包含许多对象的OR表达式Criterion,可以使用的实例org.hibernate.criterion.Disjunction.使用此对象相当于使用多个OR限制,但更方便.要获得一个Disjunction对象,请致电Restrictions.disjunction().
如果需要创建包含许多对象的AND表达式Criterion,可以使用对象org.hibernate.criterion.Conjunction.该Restrictions.conjunction()方法返回一个Conjunction.
的Disjunction和Conjunction类提供add()的方法来施加OR或AND分别的标准之间.
在您的特定情况下,您可以Disjunction使用两个创建外部Criterion:
Student谁没有上课;Conjunction有两个Criterion:
Student分配给classe属于schoolYear "1";Students已pass设置为true.以下代码使用Disjunction和Conjunction对象构造必要的条件.
Criteria c = session.createCriteria(Student.class)
.createAlias("assignements", "a")
.createAlias("a.classe","c");
Disjunction or = Restrictions.disjunction();
or.add(Restrictions.isNull("classeActuelle"));
Conjunction and = Restrictions.conjunction();
and.add(Restrictions.eq("a.pass", Boolean.TRUE)
and.add(Restrictions.eq("c.schoolYear", "1"))
or.add(and);
c.add(or);
// you can use your criteria c now
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12172 次 |
| 最近记录: |