【发布时间】:2014-03-08 01:28:43
【问题描述】:
我的项目中有以下实体:
AccountGroupAccountItemAccountSegment
具有以下关系:
AccountGroup拥有List<AccountItem>AccountItem有List<AccountSegment>
一切正常。
当我将最后一个关系更改为:
-
AccountItem有Set<AccountSegment>
AccountGroup 从数据库读取的对象看起来很奇怪。如果给定AccountItem 有三个AccountSegments,那么我在AccountGroup 中有三个相同的AccountItems。
来自调试器的镜头可能比我更能说明问题:
如您所见,accountMapperItems 列表有四个位置,而不是两个。第一对是重复的,每个具有相同的变量。 (第二个类似,屏幕截图中没有显示)。
下面我粘贴实体代码片段:
class AccountGroup {
...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "group")
private List<AccountItem> accountMapperItems;
....
}
class AccountItem {
...
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.REFRESH, CascadeType.MERGE })
@JoinTable(
joinColumns={@JoinColumn(name="ACCOUNT_ITEM_ID", referencedColumnName="ID")},
inverseJoinColumns={@JoinColumn(name="SEGMENT_ID", referencedColumnName="ID")})
private Set<Segment> segmentSet;
@ManyToOne
private AccountGroup group;
...
}
AccountSegment 没有任何链接。
有谁知道为什么要检索accountMapperItems 列出每个AccountSegment 的一个位置?
问题是joinable中没有重复的条目!我已经仔细检查过了。
更新
@Fetch (FetchMode.SELECT)
解决了这个问题,答案中提到的帖子中提供了进一步的解释。
【问题讨论】:
标签: java hibernate jpa many-to-many