在测试获取数据库中的数据或者在页面获取时,有时会遇到这样的错误提示:
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>