2013-02-05 37 views
0

在Spring/Hibernate/Java/Tomcat應用程序中,我正在編寫組織與其聯繫人之間的OneToMany關係。Hibernate:具有兩個不同ManyToOne關係的子表

組織1:M聯繫(有外鍵org_id)

在組織我有這樣的領域:

@OneToMany(mappedBy="organization") 
private List<Contact> contacts; 

在跟我有這樣的領域:

@ManyToOne 
@JoinColumn(name="org_id") 
private Organization organization; 

所有到目前爲止工作正常。現在我添加一個優惠的概念。優惠可以由組織進行,並且您可以與指定的聯繫人聯繫以獲得特定優惠。

優惠有其組織(org_id)和指定聯繫人(contact_id)的外鍵。

到目前爲止,報價看起來像:

@OneToOne 
@JoinColumn(...) 
private Organization offering_org; 

@OneToOne 
@JoinColumn(...) 
private Contact offering_contact; 

這裏來我的問題點。我已經註釋了Contact類與Organization一起使用。如果我嘗試以通常的Hibernate方式持續提供Offer對象,則需要將組織對象和Contact對象的副本存儲到Offer對象中。這似乎與我現有的組織有衝突:聯繫使用這兩個Java類。例如,如果我與Offer一起使用1:1,如果我將它放入Contact類,是否可以選擇使用兩者之一還是強制同時使用?

由於要約是另一種關係,是否需要編寫聯繫人的數據傳輸對象版本以用於優惠關係?

謝謝, 傑羅姆。

回答

0

我在想我的原始問題有點愚蠢。我嘗試的是將此放入Offer.java中:

@Column(name="org_id") 
private Long orgId = null; 

@Column(name="contact_id") 
private Long contactId = null; 

我手動填充orgId是因爲優惠總是綁定到用戶的組織。它是網頁中的隱藏字段。

我把一個SELECT填充了適當的Contact對象(contact.id,contact.name)在網頁中。

當提交網頁時,Offer的orgId和contactId字段被填充到@ModelAttribute參數中。這把我帶到了我想去的地方。

爲了解決先生的意見,mspringer,如果我願意使用我的Offer對象中的組織或聯繫人列表,您的示例可以工作(您說明了「創建新的」情況)。這也是我原來的問題的主題。但是,既然我看到我並不真的想要在提議中使用擴展對象,也不希望這樣,我可以避開我最初提出的問題。

感謝所有看着我在困惑中練習的人。

+0

感謝您的回覆。我在下面的「回答問題」中回答了你的回答。 –

0

也許我不完全理解的問題,但我只希望做這樣的事情:

// contact & organization being already persisted entity objects 
Offer offer = new Offer(); 
offer.setOffering_org(organization); 
offer.setOffering_contact(contact); 

// Persisting the new Offer object to the database, 
// implicitly making the relations. 
service.saveObject(offer); 

我看不出有任何理由來創建組織對象的副本(S)?
它恰好是在組織對象中的「聯繫人」的集合也可以是聯繫人內的一個或多個提供對象。

+0

感謝您的回覆。我在「回答問題」中解答了您的回覆(請參閱第頁上的其他地方)。 –

相關問題