Hibernate延迟加载需要EJB事务吗?
当尝试使用 hibernate 优化 java ee 6 项目上的事务时,我尝试像使用 Eclipselink 那样进行操作,并为只读查询关闭事务,如下所示:
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public User fetchUser(Integer id){
User u = em.find(User.class, id);
u.getRoleList().size();
return u;
}
在 hibernate 中,尝试读取用户时会抛出异常角色,声称会议已经结束。 Hibernate 延迟加载真的需要完整的 EJB 事务来读取数据吗?
When trying to optimize transactions on my java ee 6 project using hibernate, I tried to do as I did with Eclipselink and have transactions turned off for read-only queries, like follows:
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public User fetchUser(Integer id){
User u = em.find(User.class, id);
u.getRoleList().size();
return u;
}
In hibernate, this throws and exception when trying to read the user roles, claiming the session was closed already. Does hibernate lazy loading really require a full scaled EJB transaction just for reading data?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简而言之,是的。
无论如何,拥有事务是一个好主意,因为
em.find
的请求和延迟加载的请求)看到数据库处于相同的状态:第二次读取不会看到数据库的状态。例如,看到在第一个之后立即发生的事情。In short, yes.
Having a transaction is a good idea anyway because
em.find
and the one for the lazy loading) see the database in the same state: the second read doesn't see something committed right after the first one, for example.