默认
FetchType的
ManyToMany是
LAZY和Hibernate文档与懒惰协会合作明确调用这种访问是错误的。只有在会话仍处于打开状态时,才能与延迟关联的对象进行交互。文档的该部分还提供了访问对象的这种延迟关联成员的替代方法。我们更喜欢
JOIN在应用程序中按照所使用的标准指定获取方式
编辑 :
Set<Foo> favourites = user.getFavourites();
上面的语句实际上并不返回包含所有
Foo对象的集合。它只是一个代理。
Foo仅当像这样访问集合中的元素时才提取实际对象
favorites.iterator()。显然,此操作发生在您的
getFavorites()方法之外。但是该方法
@Transactional上的注释
getFavorites()指示该方法结束时将关闭会话。
因此,在收藏夹集上调用方法时,会话已经关闭,因此是异常。
为了解决这个问题,您应该使用Criteria对象检索用户并指定提取类型,
JOIN以便在返回的User对象中填充Foo对象。



