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使用联接表分离条件_Java_Hibernate - Fatal编程技术网

Java hibernate使用联接表分离条件

Java hibernate使用联接表分离条件,java,hibernate,Java,Hibernate,我有一个关于hibernate及其detachedcriteria使用的快速问题 三个表都有各自的ID作为父键 这些表是表课程、表教师及其联接表教师课程。 课程和教师都与教师课程有一对多的关系 我现在的问题是,如何获得所有具有教师ID的独特课程 我现在的代码是 public static ArrayList<Course> getCoursesByTeacher(Teacher teacher){ ArrayList<Course> courses = new A

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

三个表都有各自的ID作为父键

这些表是表课程、表教师及其联接表教师课程。 课程和教师都与教师课程有一对多的关系

我现在的问题是,如何获得所有具有教师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;
}
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;}
改进版