【发布时间】:2011-12-25 22:14:18
【问题描述】:
各位,请帮我解决以下问题。
我遇到了著名的“无法同时提取多个包”错误,因为我的父实体中有两个列表。这是一段代码:
class Manager{
@OneToMany(cascade = CascadeType.ALL)
@Fetch(FetchMode.JOIN)
@IndexColumn(name = "id")
private List<Action> actions;
@OneToMany(cascade = CascadeType.ALL)
@Fetch(FetchMode.JOIN)
@IndexColumn(name = "id")
private List<Activity> activities;
(...)
}
映射是单向的。
好的,我在 google 上搜索到我可以使用 IndexColumn 注释来修复它。如您所见,我已经实现了这一点,现在我没有得到提到的异常。但问题是,现在如果我想从 db 中获取所有管理器,我会收到更多真正存在的管理器实例!
例如,如果我在每个集合中只有 1 个管理器和 3 个子实例,则为 9 个管理器实例。我可以理解为什么会这样:Hibernate 产生一个看起来像
的选择select ... from Manager this_
left outer join manager_action actions3_ on this_.id=actions3_.Manager_id
left outer join Action action4_ on actions3_.actions_id=action4_.id
left outer join Manager_Activity activities5_ on this_.id=activities5_.Manager_id
left outer join Activity activity6_ on activities5_.activities_id=activity6_.id
... 它确实获取了多于一个的行。
为什么会这样? 我该如何解决?
【问题讨论】: