[英]Why is in many to one bidirectional relation many side is always the owning side of the relationship?
[英]Bidirectional one-to-many with one as owning side
有沒有辦法讓“一個”成為一對多關系的所有者一方? 每一個樣本具有mappedBy
在@OneToMany
。 甚至這個類似問題的答案也是如此。
我希望一方是擁有方,因為當我添加一個多/子時,我也會更改一個/父的一些信息,我只想更新父,為了代碼簡單並確保它全部進入相同的 ACID 事務。
但我就是做不到。 Hibernate 不斷抱怨
實體映射中的重復列
我的實體:
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToMany(fetch = EAGER, cascade = {ALL}, orphanRemoval = true)
@JoinColumn(name = "parent_id", referencedColumnName = "id", nullable = false)
private final Set<Child> children = new HashSet<>();
}
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
private Parent parent;
}
解決實體錯誤映射中的重復列。
您可以從@JoinColumn
注釋中刪除nullable=false
,如下所示:
代替
@JoinColumn(name = "parent_id", referencedColumnName = "id", nullable = false)
嘗試
@JoinColumn(name = "parent_id", referencedColumnName = "id", insertable = false, updatable = false)
但是如果你想保留nullable=false
,那么
要么刪除private Parent parent;
Child
類的聲明
或者
使用@Transient
注釋或private transient Parent parent;
使其成為瞬態private transient Parent parent;
你有什么
@JoinColumn(name = "parent_id", referencedColumnName = "id")
與
@OneToMany(mappedBy="parent", fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, orphanRemoval = true)
從表面上看。 你做這件事的動機是什么?
編輯:是的,好的。 保持雙向關系的方式有所不同。 如果使用@JoinColumn
則必須設置父級,如果使用mappedBy
則不必設置父@JoinColumn
,但@JoinColumn
是刪除了,
insertable = false, updatable = false`,所以我不確定為什么有一個關於必須包括這些的討論。 另外,我不確定您為什么會遇到休眠重復列錯誤,我沒有得到類似的信息。 需要注意的是 CascadeType.ALL 是需要保存子級的,而無需設置父級。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.