通过HQL检索和加载第三级引用的类

时间:2009-11-02 23:16:01

标签: hibernate hql

我在Hibernate中为Student提供了以下类设置。 班级学生包含一组乐趣对象。每个得分对象都包含得分,学生ID和gradeEvent对象。 成绩事件对象包含日期,描述等内容。 我想获取一个学生并加载所有相关的得分对象和与已获取的每个Score对象关联的gradeEvent对象。以下HQL允许我访问Student对象,其中相关的Score对象的字段接受gradeEvent

"from Student student left join fetch student.scores where student.studentId=1"

如何在查询时加载gradeEvent对象,以便在会话关闭后可以访问它?我把我的映射文件的相关部分放在下面。

学生

<set name="scores" inverse="true" lazy="true" table="score" fetch="select">
<key>
<column name="student_id" not-null="true" />
</key>
<one-to-many class="gradebook.model.Score" />
</set>

得分

<many-to-one name="student" class="gradebook.model.Student" update="false" insert="false" fetch="select">
<column name="student_id" not-null="true" />
</many-to-one>
<many-to-one name="gradeEvent" class="gradebook.model.GradeEvent" update="false" insert="false" fetch="select">
<column name="event_id" not-null="true" />
</many-to-one>

gradeEvent

<set name="scores" inverse="false" lazy="true" table="score" fetch="select">
<key>
<column name="event_id" not-null="true" />
</key>
<one-to-many class="gradebook.model.Score" />
</set>

1 个答案:

答案 0 :(得分:1)

您可以使用与分数完全相同的方式访问它;你只需要为集合分配一个别名,这样你就可以再次引用它:

from Student student
 left join fetch student.scores score
 left join fetch score.gradeEvent
where student.studentId=1