【发布时间】:2019-02-11 07:46:44
【问题描述】:
我想用惰性获取模式初始化一个集合并在我的查询中使用 Join Fetch,但我有时(并非总是)遇到惰性初始化异常???
org.hibernate.LazyInitializationException: 延迟初始化失败 角色集合:xxx.entity.Product.producerEntities,不能 初始化代理 - 没有会话 ...
例如这个查询:
"select p from Product p left join fetch p.producerEntities"
还有我的持久性课程:
class Product
{
Set<Producer> producerEntities = new HashSet<>();
....
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name="pid")
public Set<Producer> getProducerEntities(){
return producerEntities;
}
....
}
我不明白这是什么问题?
【问题讨论】:
-
@OneToMany 的默认获取类型是惰性的。
-
我知道 Angad Bansode,为了清楚起见,我写了 fetch = FetchType.LAZY。
-
您能否添加一个示例说明该异常何时发生?在
Producer中获取一些嵌套元素时会发生这种情况吗? -
您可以使用动态实体图可能是更好的解决方案,如果您需要定义一个用例特定的图。如果加入提取不起作用。