Hibernate查询 - 似乎无法比较所有数据集?

时间:2014-05-08 22:52:16

标签: hibernate

这是我的数据库结构:

    Foo: //foo class
       Set<Students> students;
       Set<Teachers> teachers;
    //students
    Students:
       Int id;
       String name;
    //teachers
    Teachers:
       Int id;
       String name;


    Criteria criteria = sess.createCriteria(Foo.class ,"foo").
                             createAlias("students", "student").
                             createAlias("teachers","teacher");

    //create and statement for the student id

    Conjunction andStudent = Restriction.conjunction();
    for (Student student : currentFoo.students) {
        andStudent.add(Restrictions.eq("student.id", student.id));
    }

基本上我想创建一个hibernate查询,其中给出一个Foo列表我想找到与我所比较的Foo中所有学生和老师相匹配的Foos。因此,如果currentFoo具有学生ID 1,3和教师ID 2,4我希望查询返回包含BOTH学生ID 1,3和教师ID 2,4以及其可能包含的任何其他内容的Foos。

运行查询(处理独特结果并删除currentFoo结果)后,我得到0结果...

我确实从currentFoo中删除了一行数据,用于从2行id 1,2到1行1的学生,我得到了结果 - 所以在我看来问题的一部分是第2行的学生在查询期间没有被比较或读入?有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

在这种情况下,您不想使用eq Criterionin Criterion就是您所需要的。将循环替换为构建学生ID集合的循环,然后您可以使用单个(非循环)限制:

andStudent.add(Restrictions.in("student.id", collectionOfStudentIds));

你甚至可以简单地做

andStudent.add(Restrictions.in("student", collectionOfStudents));

但是我有一段时间没有使用它,所以我忘了它是否有效。