当尝试使用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事务来读取数据?
答案 0 :(得分:2)
简而言之,是的。
无论如何,进行交易是一个好主意,因为
em.find
的一个请求和延迟加载的请求)看到处于相同状态的数据库:第二个读取不会在第一个读取之后看到提交的内容,例如