我想模擬JPA/Hibernate兩個實體之間的關係,一個組和一個帳戶。一個帳戶可以有多個組,但反之亦然,所以我們在帳戶和組之間有OneToMany關係。 我的工作同事建議到實體Account
和Group
模擬像如何在構建hibernate實體時處理雙向關係?
public class Account {
private List<Group> groups = new ArrayList<Group>();
public Account() {}
public void setGroups(List<Group> usergroups) {
this.groups = groups;
}
@OneToMany(mappedBy = "account")
public List<Group> getGroups() {
return groups;
}
}
和
public class Group {
private String name;
private Account account;
public Group() {}
public Group(String name, Account account) {
this.name = name;
addToAccount(account);
}
public void addToAccount(Account account) {
setAccount(account);
List<Group> accountGroups = account.getGroups();
accountGroups.add(this);
}
@ManyToOne
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
}
我現在的問題是關於輔助方法addToAccount
中的Group
構造函數的用法。根據我的同事的說法,這種方法是必要的,因爲我們需要更新雙方兩個實體之間的雙向關係,以確保兩個實體的一致的存儲模型。
不過,我相信調用構造函數的方法addToAccount
是不是一個好主意,因爲
的
List
Group
的s是懶洋洋地 牽強,所以調用該方法addToAccount
需要一個開放的 交易。因此,Group
的構造函數只能在 打開的事務中調用。在我看來,這是一個非常煩人的限制。給出作爲參數 到的
Group
構造函數的Account
對象 由構造改變。在我看來,這是構造函數令人驚訝的副作用,不應該發生。
我的建議是爲了更好地使用一個簡單的構造像
public Group(String name, Account account) {
this.name = name;
this.account = account;
}
和與雙向關係手動處理。但也許我錯了。在構建hibernate實體時,人們應該如何處理雙向關係?
我確實認爲這是不好的做法,你的大學提出了什麼。不只是大約1或2(特別是2!),高於你應該在構造函數中使用可重寫的方法,因爲它可能在子類中被有效地覆蓋,並且在子對象構造函數被調用!之前被調用。我相信你應該保持一個一致的對象圖(內存模型),我正在研究如何最好地做到這一點,並通過這個..並且不能得到靜音!你最終得到答案嗎? – Victor