我有以下的(簡單)的映射:JPA(使用Hibernate)reatach現有實體在@OneToMany -
@Entity
public class Role {
@OneToMany(fetch = FetchType.EAGER) private Set<Privilege> privileges;
}
我想做以下(簡化):
- 我有創建一個
Role
(R1)與Privilege
實體(P1) - 我想創建另一個新角色(R2),並給它相同的特權(P1)
因此,當創建新的R2時,它的特權集也是新的(HashSet不是PersistedSet),但它包含現有的P1;看來,Hibernate是無法認識到P1已經存在的事實並妥善持續的關係
我已經已經嘗試到以下幾點:
- 保存新角色(R2)與兩個
entityManager.persist
和entityManager.merge
- 添加級聯= {CascadeType.ALL}對角色和特權
- 之間的映射試圖預加載權限(以便在當前編碼擴頻通信存在實體離子)保存新角色
之前,我還沒有嘗試過(還):
- 指定的映射
- 手工做更多的操作
@JoinColumn(name = "PRIV_ID")
(如第一堅持空的角色實體他們更新權限) - 最後的手段
我在想這是一個非常標準的用例,所以也許我失去了一些東西,阻止我堅持這個協會公關operly。 任何想法? 謝謝。
雖然診斷是正確的,但解釋是錯誤的:OneToMany可以是單向的(因此,無後向鏈接),如果是,默認策略是使用連接表,就像一個多對多的關聯(但是有一個唯一的約束)。 – 2012-02-27 09:52:18