[英]JPA unidirectional ManyToMany - duplicated positions in when retrieving list
我的項目中有以下實體:
AccountGroup
AccountItem
AccountSegment
隨着關系:
AccountGroup
具有List<AccountItem>
AccountItem
具有 List<AccountSegment>
一切都很好。
當我將最后一個關系更改為:
AccountItem
具有Set<AccountSegment>
從數據庫讀取的AccountGroup
對象看起來很奇怪。 如果給定的AccountItem
有三個AccountSegment
,那么我在AccountGroup
有三個相同的AccountItem
。
來自調試器的鏡頭可能比我能說得更好:
如您所見, 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
沒有任何鏈接。
有誰知道為什么它retriving accountMapperItems
列表每一個位置AccountSegment
?
問題不在於連接表中的重復條目! 我仔細檢查了一下。
更新
@Fetch (FetchMode.SELECT)
解決了這個案子,在答案中提到的帖子中有進一步的解釋。
確保所有實體都實現了hashCode()
和equals()
。 某些集合(如集合)使用這些方法來唯一標識元素。
編輯 :如果這沒有解決它,那么我認為重復項很可能是由FetchType.EAGER
引起的。 這個答案解釋得很好。 嘗試刪除FetchType.EAGER
以查看它是否有任何區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.