使用hibernate查询从4个表中获取数据连接在一起

时间:2016-01-03 05:20:20

标签: java hibernate join hql

我有4张桌子:

教师,学生,课程及其共同联接表TeacherStudentCourse。

前三个表与最后一个表都有一对多的关系。 以下是我的数据库DataBase sample的屏幕截图 因此,例如,我应该能够通过提供教师ID和课程ID来获得学生的愿望。

我之前曾在联名表上问过一个问题。 Previous Question 而我确实得到了答案。 我试图根据以前的代码进行改进

    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    List<Object> list = session.createQuery("select s from Student s join s.teacherStudentCourses tsc where tsc.teacher = :teacher and tsc.course = :course")
            .setParameter("teacher", teacher)
            .setParameter("course", course)
            .list();
    session.getTransaction().commit();
    session.close();

但是经过无数次的尝试,我似乎并没有让它发挥作用。也许查询不能以这种方式创建?任何帮助将不胜感激!

[UPDATE]

我得到的错误是:

  

org.hibernate.QueryException:无法解析属性:teacherStudentCourses:model.Student [select s from model.Student s join s.teacherStudentCourses tsc where tsc.teacher =:teacher and tsc.course =:course]

1 个答案:

答案 0 :(得分:0)

这里的表格与外键相互关联,因此所有子表格(教师,资源,学生)都应在其POJO中具有父类型变量。

这是Student.class中的“TeacherStudentCource tsc”。 现在查询将是..

select s.studentId,s.name,s.gender,s.birthdate, from Student s inner join s.tsc b where b.teacherId=:tid and b.courceId=:cid;

教师ID = tid 课程ID = cid