【发布时间】:2016-05-26 18:09:35
【问题描述】:
所以,假设我有两个对象:Course 和 Exercise。课程包含练习列表。
启用了延迟加载,并通过存储库获得了我感兴趣的课程:
couserRepo.query(new ByNameSpec("courseName")).
现在我想访问课程练习,但是当我拨打course.getExerccises() 时收到一条消息,该会话已经关闭。
所以,我必须再次查询repo,这绝对不方便。
怎么办?
【问题讨论】:
所以,假设我有两个对象:Course 和 Exercise。课程包含练习列表。
启用了延迟加载,并通过存储库获得了我感兴趣的课程:
couserRepo.query(new ByNameSpec("courseName")).
现在我想访问课程练习,但是当我拨打course.getExerccises() 时收到一条消息,该会话已经关闭。
所以,我必须再次查询repo,这绝对不方便。
怎么办?
【问题讨论】:
请记住,每次操作都打开会话是反模式。请参阅http://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#session-per-operation 了解更多信息。
Hibernate org.hibernate.Session 的范围是灵活的,但您永远不应该将您的应用程序设计为对每个数据库操作都使用新的 Hibernate org.hibernate.Session。
我认为您应该考虑 Session-per-request 模式。
【讨论】: