Hibernate加载数据失败failed to lazily initialize a collection of role

时间:2023-01-08 11:47:32

在测试获取数据库中的数据或者在页面获取时,有时会遇到这样的错误提示:

failed to lazily initialize a collection of role: com.exam.entity.Question.questionAnswer, no session or session was closed

其中com.exam.entity.Question.questionAnswer为错误的相关类名,根据实际情况而定。

从错误的字面意思可以发现是延迟加载初始化时遇到了问题。

从错误的提示相关类com.exam.entity.Question.questionAnswer不难看出是Question中的questionAnswer加载失败了。

找到相关的Hibernate映射文件可以发现:

Question映射文件中的questionAnswer
<set name="questionAnswer" inverse="true" cascade="delete">
<key column="question_no"/>
<one-to-many class="QuestionAnswer"/>
</set>

该映射并没有设置lazy,所以这里是使用了默认的lazy=”true”,所以导致在页面获取时,因为session已经关闭,所以获取不到questionAnswer的数据。

所以为了解决这个问题,可以在set的lazy设置为false:
为set设置lazy="false"
<set name="questionAnswer" inverse="true" cascade="delete" lazy="false">
<key column="question_no"/>
<one-to-many class="QuestionAnswer"/>
</set>