使用连接表

时间:2015-12-31 09:51:19

标签: java hibernate

我有关于hibernate及其detachedcriteria的使用的快速问题。

三个表都将其ID分别作为父键。

表格为课程,表格教师及其加入表格 TeacherCourse 。 课程和教师都与TeacherCourse有一对多的关系。

我现在的问题是如何获得所有具有教师ID的独特课程

我目前的代码就像

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;
}

但是教师课程之间缺失了。我如何插入老师课程并找到老师的所有独特课程。

1 个答案:

答案 0 :(得分:0)

JB Nizet给出了正确的答案,只是为了让它更清楚,这是我在我的情况下的解决方案:

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;
}