2009-11-02 36 views
0

我对Hibernate中的学生有以下类设置。 班级学生包含一组Score对象。每个得分对象都包含得分,学生ID和一个gradeEvent对象。 一个等级事件对象包含诸如日期,描述等等。 我想获取一个学生并加载所有关联的评分对象以及与已获取的每个Score对象关联的gradeEvent对象。下面的HQL让我访问一个Student对象与相关联得分对象的领域接受gradeEvent通过HQL检索和加载第三级refrefd类

"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

可以恰好能满足您的分数也做了同样的方式对其进行访问;您只需要为收集分配别名,以便您可以再次参考:

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