首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FetchType.Lazy.!

FetchType.Lazy.!
EN

Stack Overflow用户
提问于 2012-12-18 12:55:10
回答 1查看 2.9K关注 0票数 2

我对基于注释的事务管理很陌生。我正在用Spring3.1,Hibernate 3.2开发web应用程序。我对“交易”有一些问题。我将加载POJO,其子集合如下所示:父类是具有DealerMaster集的DealerMember,因此我声明为

in DealerMaster:

代码语言:javascript
复制
@OneToMany(fetch = FetchType.LAZY,mappedBy = "dealerMaster")
    @Cascade({ CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN})
    public Set<DealerMember> getDealerMembers() {
        return this.dealerMembers;
    } 

我使用我的HibernateUtil类来执行任何查询,所以我使用了load方法:

代码语言:javascript
复制
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();
    }

现在,问题是我的load方法成功运行,但是当在paramObject上移动跟踪器时,它显示:

代码语言:javascript
复制
com.sun.jdi.InvocationException occurred invoking method.

而且,只有当我试图在控制器端访问它时,才能在服务层访问所有值,结果会抛出错误:

代码语言:javascript
复制
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.lbt.model.DealerMaster.dealerMember, no session or session was closed

当我在googled上搜索相同的问题时,我发现这与延迟加载有关,但我尝试了懒惰= false,也尝试了fetchType.Eager,但问题是相同的。

EN

回答 1

Stack Overflow用户

发布于 2012-12-18 13:35:08

您必须了解关于LazyInitialzation异常的一件事,当hibernate无法初始化已设置为获取延迟的对象时,.It就会发生,并且通常是当会话关闭在包含设置为惰性获取的其他对象集的对象上时发生。

当将fetch设置为when时,在某些情况下,当涉及对象的层次结构时,它可能无法工作。例如:用户->包含角色和角色集->包含权限集。NOw,如果所有的都是懒散的抓取。如果我获得用户对象和关闭会话,然后尝试从其中获取角色,我将获得exception.If,我将在用户POJO中设置fetch渴望获得角色,但仍然会得到该异常,因为角色POJO包含在延迟获取上的权限。

因此,要么将层次结构中的所有内容设置为EAGER(有性能问题,但将有效)。或者在完成对对象的处理后关闭会话(保持延迟获取)。

事情会好起来的:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13933532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档