gpt4 book ai didi

hibernate - 如何在Hibernate中加入两个不同的条件?

转载 作者:行者123 更新时间:2023-12-04 10:14:10 24 4
gpt4 key购买 nike

我的数据库中有三个表,一个学生,一个类(class)和一个作业。 POJO如下:

Student{
Classe currentClasse;
Set<Assignement> assignements;
}

Classe{
Set<Assignement> assignements;
SchoolYear schoolYear;
}

Assignement{
Classe classe;
Student student;
Boolean pass;
}

基本上,一个学生有一个当前类(class),以及一个作业列表(他被分配到的所有类(class))。

我的问题是,在 hibernate 状态下,我想知道所有没有类(class)( is null) 的学生,他们被分配到属于“1”学年的类(class),但 pass设置为 true
我设法制定了两个单独的标准来获得我想要的东西:
session.createCriteria(Student.class)
.add(Restrictions.isNull("classeActuelle"))


session.createCriteria(Student.class)
.createAlias("assignements", "a")
.add(Restrictions.eq("a.pass", Boolean.TRUE)
.createAlias("a.classe","c")
.add(Restrictions.eq("c.schoolYear", "1"))

但是我不知道如何用or来“统一”这两个条件。

最佳答案

如果要使用许多 OR 对象创建 Criterion表达式,则可以使用 org.hibernate.criterion.Disjunction 的实例。使用此对象等效于但比使用多个OR限制更方便。要获取Disjunction对象,请调用 Restrictions.disjunction()
如果您需要使用许多AND对象创建 Criterion表达式,则可以使用 org.hibernate.criterion.Conjunction 对象。 Restrictions.conjunction() 方法返回ConjunctionDisjunctionConjunction类提供add()方法,以在条件之间分别应用OR或AND。
您的情况:
在您的特定情况下,您可以使用两个Disjunction创建一个外部Criterion:

没有类(class)的

  • Student
  • 一个带有两个ConjunctionCriterion:

    分配给属于Studentclasse
  • schoolYear"1"
  • Student设置为 pass
  • true


  • 样例代码:
    以下代码使用 DisjunctionConjunction对象构造必要的条件。
    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

    关于hibernate - 如何在Hibernate中加入两个不同的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385579/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com