2010-05-10 50 views
7
Create Table A (
ID varchar(8), 
Primary Key(ID) 
); 

Create Table B (
ID varchar(8), 
A_ID varchar(8), 
Primary Key(ID), 
Foreign Key(A_ID) References A(ID) 
); 

既然我已經創建使用上面的SQL語句兩個表,我想創建Entity類對他們來說,該類B,我有這些成員屬性:Java JPA @OneToMany需要回報@ManyToOne?

@Id 
@Column(name = "ID", nullable = false, length = 8) 
private String id; 
@JoinColumn(name = "A_ID", referencedColumnName = "ID", nullable = false) 
@ManyToOne(optional = false) 
private A AId; 

A類,我是否需要回報多對一的關係?

@Id 
@Column(name = "ID", nullable = false, length = 8) 
private String id; 
@OneToMany(cascade = CascadeType.ALL, mappedBy = "AId") 
private List<B> BList; //<-- Is this attribute necessary? 

它是一個必要或一個好主意,有對@ManyToOne互惠@OneToMany?如果我現在做出設計決定忽略@OneToMany帶註釋的屬性,那會不會再讓我進一步咬我?

回答

11

@ManyToOne有一個相互@OneToMany的必要或好主意嗎?

不,它不是強制性的,這是一個純粹的設計決定。整個問題是...你想這(即單向協會):

uni-directional

還是這個(即雙向關聯):

bi-directional

如果您不需要從A獲取Bs,那麼您可以跳過A側的bs屬性和OneToMany

如果我做出設計決定,現在不再提供@OneToMany註釋屬性,它會回來咬我。

不,您可以稍後添加它,如果你發現你需要它。

+0

+1和檢查@Pascal Thivent:您指出我可以在以後添加它,如果我需要它:那是我的主要關注點。 – bguiz 2010-05-11 06:42:20

+0

我通常儘量避免單向映射。僅僅因爲數據庫中的某些東西是用單獨的連接表建模的(無論出於何種原因)並不意味着我的對象模型也必須這樣做。在上面的例子中,OneToOne-Mapping對於單向解決方案就足夠了(當然這必須堅持域)。 – lostiniceland 2015-08-04 09:29:49

2

它們是可選的。如果您不想使用它們,則無需將它們添加到您的模型中。

我sugguest避免反向映射,因爲在所有此類藏品可能會變得相當大,最持久化層不會處理這些非常好。在很多情況下,您必須自己處理添加/刪除已加載/管理的與這些集合相關的實體。所以只有在他們真的讓事情變得更簡單時才加上這些。

+0

+1 @Daniel Bleisteiner:處理它們所需的大量代碼可能非常笨重。感謝您的建議 – bguiz 2010-05-11 06:44:51