我有“学生”和“班级”与多对多的关系。中间有一个链接表。
如果我想通过以下方式用 HQL 检索所有学生,一切都很好:
Query queryObject = getSession().createQuery("from Student");
return queryObject.list();
使用上面的代码,如果有三个学生,我会得到三个学生的列表。
但是,如果我使用标准,那么只要链接表中没有关联就可以了。
Criteria crit = getSession().createCriteria(Student.getClass());
return crit.list();
使用第二个代码,只有当链接表为空时,我才会得到三个结果。但是,当我添加关联时,我得到 6 个结果。查看日志,Hibernate 生成了多个选择。这怎么可能?
有人可以解释为什么会这样吗?如何修复条件以便只返回这三个记录一次?
编辑
在学生类中,我以这种方式映射:
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="room_student_rel"
, joinColumns={
@JoinColumn(name="id_student")
}
, inverseJoinColumns={
@JoinColumn(name="id_room")
}
)
private List<Room> rooms;
在房间(班级)中,我以这种方式映射:
@OneToMany(fetch=FetchType.EAGER, mappedBy="room")
@Fetch(FetchMode.SELECT)
private List<RoomStudent> roomStudents;