【问题标题】:Illegal access to loading collection (hibernate.LazyInitializationException)非法访问加载集合(hibernate.LazyInitializationException)
【发布时间】:2011-05-18 16:18:40
【问题描述】:

我正在将 JPA 与 Hibernate 持久性提供程序一起使用。

我有一对多的映射,我用过

@OneToMany(mappedBy = "mSearchPreference", cascade = CascadeType.ALL, fetch=FetchType.EAGER)

我可以在控制台上看到一对多的 SQL 语句,尽管我遇到了异常

illegal access to loading collection  (hibernate.LazyInitializationException)
org.hibernate.LazyInitializationException: illegal access to loading collection
    at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:341)
    at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
    at org.hibernate.collection.AbstractPersistentCollection.readElementExistence(AbstractPersistentCollection.java:142)
    at org.hibernate.collection.PersistentSet.add(PersistentSet.java:187)

有人可以帮我解决我需要做的其他安排吗?

【问题讨论】:

  • 您确定要添加的不是另一个集合吗?您应该有更多可用的堆栈跟踪。
  • 嗨,这里是完整的堆栈跟踪
  • @SatishKumar 你能展示你用来获取实体的代码吗?

标签: jpa


【解决方案1】:

这通常意味着 Hibernate 会话在尝试访问新实体时已经关闭。解决此问题的两个选项是:

  • 查看您的所有模型图,并在需要时设置适当的 EAGER 提取类型。
  • 设置扩展持久化内容:@PersistenceContext(type = PersistenceContextType.EXTENDED)

【讨论】:

  • 我使用 Set 来处理一对多关系是任何问题,我是否需要配置任何额外的东西才能使用 Set,在 Hibernate 映射中使用 Set 和 List 的实际区别是什么。
猜你喜欢
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多