我将 Spring 与 Hibernate 一起使用来为 Liferay 门户服务器开发 Portlet。我现在基本上有两个实体,A 和 B,其中 A 可能包含许多 B。所以这就是两者之间的一对多映射。
<set cascade="all" lazy="true" name="comments" order-by="creationDate desc">
<key column="lfpn_pinboardentries_idPinboardEntry" not-null="true"/>
<one-to-many class="Comment"/>
</set>
在DAO层中实体A对应的DAO中,我继承自spring提供的“HibernateDaoSupport”,因此典型的数据检索如下所示:
...
public A getA(long id) {
return (A) getHibernateTemplate().get(A.class, id);
}
...
如果我有“lazy=false”,一切正常,但是一旦我切换到“lazy=true”,它就会出现以下错误:
org.hibernate.LazyInitializationException:未能延迟初始化角色集合:com.lifepin.entities.PinboardEntry.comments,没有会话或会话被关闭
有人对可能出现的问题有什么建议或提示如何解决它吗?
Thanks!
如果您在一个请求中加载了该对象,然后在不访问延迟加载属性的情况下将该对象保存在会话中,那么您通常会收到此错误。如果您随后在不同的请求中尝试访问延迟加载的属性,您将收到此异常。
简单地说:最初加载对象的 Hibernate 会话已关闭。在不同的 Hibernate 会话中访问该对象的延迟加载属性时会导致此异常。
您必须将对象重新加载到当前的 Hibernate 会话中才能延迟加载属性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)