Java hibernate使用联接表分离条件
我有一个关于hibernate及其detachedcriteria使用的快速问题 三个表都有各自的ID作为父键 这些表是表课程、表教师及其联接表教师课程。 课程和教师都与教师课程有一对多的关系 我现在的问题是,如何获得所有具有教师ID的独特课程 我现在的代码是Java hibernate使用联接表分离条件,java,hibernate,Java,Hibernate,我有一个关于hibernate及其detachedcriteria使用的快速问题 三个表都有各自的ID作为父键 这些表是表课程、表教师及其联接表教师课程。 课程和教师都与教师课程有一对多的关系 我现在的问题是,如何获得所有具有教师ID的独特课程 我现在的代码是 public static ArrayList<Course> getCoursesByTeacher(Teacher teacher){ ArrayList<Course> courses = new A
public static ArrayList<Course> getCoursesByTeacher(Teacher teacher){
ArrayList<Course> courses = new ArrayList<Course>();
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Course.class);
detachedCriteria.add(Restrictions.eq(Key.TEACHER, teacher));
detachedCriteria.add(Restrictions.eq(Key.OBJSTATUS, Value.ACTIVED));
List<Object> list = HibernateUtil.detachedCriteriaReturnList(detachedCriteria);
for(Object o : list){
courses.add((Course) o);
}
return courses;
}
publicstaticarraylistgetcoursesbyteacher(教师教师){
ArrayList课程=新建ArrayList();
DetachedCriteria DetachedCriteria=DetachedCriteria.forClass(课程.class);
detachedCriteria.add(Restrictions.eq(Key.TEACHER,TEACHER));
add(Restrictions.eq(Key.OBJSTATUS,Value.ACTIVED));
列表列表=HibernateUtil.detachedCriteriaReturnList(detachedCriteria);
用于(对象o:列表){
课程。添加((课程)o);
}
返回课程;
}
但教师课程在两者之间缺失。我如何选择教师课程,并为教师找到所有独特的课程。如果我没有给出正确的答案,只是为了让它更清楚,以下是我在这种情况下的解决方案:
public static ArrayList<Course> getCoursesByTeacher(Teacher teacher){
ArrayList<Course> courses = new ArrayList<Course>();
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
List<Object> list = session.createQuery("select c from Course c join c.teacherCourses tc where tc.teacher = :teacher")
.setParameter("teacher", teacher).list();
session.getTransaction().commit();
session.close();
for(Object o : list){
courses.add((Course) o);
}
return courses;
}
publicstaticarraylistgetcoursesbyteacher(教师教师){
ArrayList课程=新建ArrayList();
Session Session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
List List=session.createQuery(“从课程c中选择c加入c.teacherCourses tc,其中tc.teacher=:teacher”)
.setParameter(“教师”,教师).list();
session.getTransaction().commit();
session.close();
用于(对象o:列表){
课程。添加((课程)o);
}
返回课程;
}
使用DetachedCriteria来做这件事就是在自己的脚上开枪。另外,为什么不直接返回查询返回的列表呢?您只需要一个超级简单的JPQL查询:从课程c中选择c加入c.teacherCourses tc其中tc.teacher=:teacher
嘿,谢谢。我以前从未使用过JPQL,我可以知道我应该在我的代码中填充这行代码的位置和方式吗?public List getCoursesByTeacher(Teacher-Teacher){return session.createQuery(“从课程c中选择c加入c.Teacher课程tc where tc.Teacher=:Teacher”).setParameter(“Teacher”,Teacher.List();}
。这些都有文档记录:我在HibernateUtil类中的静态方法中创建了会话,试图回收代码。现在我正在尝试使用您建议的JPQL。这是我的代码,但我想我只是在插东西。。不确定代码public ArrayList getCoursesByTeacher(教师教师){ArrayList courses=new ArrayList();Session Session=HibernateUtil.getSessionFactory().openSession();Session.beginTransaction();List List=Session.createQuery(“从课程c中选择c加入c.teacherStudentCourses tsc其中tsc.teacher=:teacher”).setParameter(“teacher”,teacher).list();session.getTransaction().commit();session.close();for(Object o:list){courses.add((Course)o);}return courses;}
改进版