如何在Hibernate下加入两个不同的标准?
我的数据库中有三个表,一个学生,一个班级和一个作业。POJO如下所示:如何在Hibernate下加入两个不同的标准?,hibernate,jakarta-ee,Hibernate,Jakarta Ee,我的数据库中有三个表,一个学生,一个班级和一个作业。POJO如下所示: Student{ Classe currentClasse; Set<Assignement> assignements; } Classe{ Set<Assignement> assignements; SchoolYear schoolYear; } Assignement{ Classe classe; Student student;
Student{
Classe currentClasse;
Set<Assignement> assignements;
}
Classe{
Set<Assignement> assignements;
SchoolYear schoolYear;
}
Assignement{
Classe classe;
Student student;
Boolean pass;
}
及
但我不知道如何用一个或 如果要创建包含多个对象的
或表达式,可以使用的实例。使用此对象等同于使用多个或多个限制,但更方便。要获取析取对象,请调用
如果需要使用多个标准
对象创建和表达式
,则可以使用的对象。该方法返回一个连词
析取
和合取
类提供了add()
方法,分别在条件之间应用OR或and
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
你的情况:
在您的特定情况下,您可以使用两个标准创建外部析取
:
没有上课的学生
s李>
- 带有两个
标准的连词
:
学生
被分配到属于学年的班级
“1”
李>
学生
s已将通过
设置为true
示例代码:
下面的代码使用析取
和合取
对象来构造必要的条件
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
只需稍作改动,它就节省了我的时间。谢谢
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"))
c.add(or);
c.add(and);
//您现在可以使用标准c了谢谢您的解释和示例代码。当我应用上述标准时,结果显示,只有“及格”的学生为真,“学年”为1。我猜这是因为在标准中,我们添加了两个别名,并且将“classeActuelle”设置为“null”的学生实际上根本没有赋值,因此,当我们添加与Assenginement和Classe表的联接时,他们不会被选中。。。有什么方法可以添加完全联接吗?我通过将条件更改为:criteriac=session.createCriteria(Student.class).createAlias(“赋值”,“a”,criteria.LEFT\u联接”).createAlias(“a.classe”,“c”,criteria.LEFT\u联接”)代码>
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"))
c.add(or);
c.add(and);