Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hibernate查询从连接在一起的4个表中获取数据_Java_Hibernate_Join_Hql - Fatal编程技术网

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

Java 使用hibernate查询从连接在一起的4个表中获取数据,java,hibernate,join,hql,Java,Hibernate,Join,Hql,我有4张桌子: 教师、学生、课程及其常用联接表TeacherStudentCourse 前三个表都与最后一个表有一对多关系。 这是我数据库的截图 因此,例如,我应该能够通过提供教师ID和课程ID来获得想要的学生 我之前在join表上问过一个问题。 我确实得到了答案。 我试图在以前代码的基础上进行改进 Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction

我有4张桌子:

教师、学生、课程及其常用联接表TeacherStudentCourse

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

我之前在join表上问过一个问题。 我确实得到了答案。 我试图在以前代码的基础上进行改进

    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();
会话会话=HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); List List=session.createQuery(“从学生中选择s加入s.teacherStudentCourses tsc,其中tsc.teacher=:教师和tsc.course=:课程”) .setParameter(“教师”,教师) .setParameter(“课程”,课程) .list(); session.getTransaction().commit(); session.close(); 但经过无数次尝试后,我似乎无法让它工作。也许查询无法以这种方式创建?任何帮助都将不胜感激

[更新]

我得到的错误是:


org.hibernate.QueryException:无法解析属性:teacherStudentCourses of:model.Student[从model.Student中选择s加入s.teacherStudentCourses tsc,其中tsc.teacher=:teacher和tsc.course=:course]


这里的表通过外键相互关联,所以所有子表(teacher、cource、student)的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

错误表明学生实体没有正确映射teacherStudentCourses字段。如果您需要更多帮助,只需发布您的实体代码org.hibernate.QueryException:无法解析属性:搜索此错误,因此有很多关于此错误的QA。我相信你会找到答案的。顺便说一句,您似乎没有在student中映射teacherStudentCourses。嗯,我想我错了,当我在student类中对teacherStudentCourses字段属性进行编码时,我对teacherStudentCourses有一个双“s”。。现在它仍然给我带来了一些其他的错误debugging@Joker,我确实有映射,但它没有显示在使用MySQL工作台中的反向工程生成的ERD中