我是基于注释的事务管理的新手。我正在使用 Spring 3.1、Hibernate 3.2 开发 Web 应用程序。我对@Transactional 有一些问题。我将加载具有以下子集的 POJO:父类是具有 DealerMember 集的 DealerMaster,因此我声明为
在 DealerMaster 中:
@OneToMany(fetch = FetchType.LAZY,mappedBy = "dealerMaster")
@Cascade({ CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN})
public Set<DealerMember> getDealerMembers() {
return this.dealerMembers;
}
我正在使用我的 HibernateUtil 类来执行任何查询,所以我使用的是加载方法:
public static Object loadObject(Session paramSession, Object paramObject)
throws Exception
{
try
{
paramObject = paramSession.load(paramObject.getClass(), getId(paramObject));
}
catch (HibernateException localHibernateException)
{
setErrorMessage(paramObject, localHibernateException.getMessage());
localHibernateException.printStackTrace();
}
现在我的问题是我的加载方法成功运行但是当在 paramObject 上移动 courser 时它显示:
com.sun.jdi.InvocationException occurred invoking method.
并且只有当我尝试在控制器端访问它时,所有值都可以在服务层访问,它会抛出错误:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.lbt.model.DealerMaster.dealerMember, no session or session was closed
当我在同一问题上搜索时,我发现这与延迟加载有关,但我尝试作为 lazy = false 也 fetchType.Eager 但同样的问题。