Java 无法提取多个行李:为什么@IndexColumn返回错误的结果?
伙计们,请帮我解决以下问题 我遇到了著名的“无法同时获取多个包”错误,因为我的父实体中有两个列表。下面是一段代码:Java 无法提取多个行李:为什么@IndexColumn返回错误的结果?,java,hibernate,jpa,Java,Hibernate,Jpa,伙计们,请帮我解决以下问题 我遇到了著名的“无法同时获取多个包”错误,因为我的父实体中有两个列表。下面是一段代码: class Manager{ @OneToMany(cascade = CascadeType.ALL) @Fetch(FetchMode.JOIN) @IndexColumn(name = "id") private List<Action> actions; @OneToMany(cascade = CascadeType.
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;
(...)
}
。。。而且它真的获取了不止一行的数据
为什么会发生这种情况?
如何修复它?Hibernate生成笛卡尔乘积,在这种情况下不去复性。像这样的笛卡尔产品(3个动作*3个活动=9行)只适用于集合而不是列表 即使有两个集合,也应该避免使用这类笛卡尔积。想想看:仅检索一个具有100个操作和100个活动的管理器,就可以从数据库中检索10000行。您或许应该提出两个问题:
- 获取管理器及其操作的一个(100行)
- 获取同一管理器及其活动的管理器(100行)
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