我有點卡住定義一個Hibernate實體:休眠:多FK關係
假設我有一個數據庫中的以下兩個表:
(A)
- fromCompany
- toCompany
- viaCompany
(B)
- companyID(PK)
- 描述
其中的元件(A)指向(B)的主鍵;所以FK和PK之間有3個一對一的關係。 我認爲3個OneToOne語句具有不同的mappedBy條件不是要走的路,mh?已經漫長的一天 - 我可能只是不明白;)
感謝您的幫助!
我有點卡住定義一個Hibernate實體:休眠:多FK關係
假設我有一個數據庫中的以下兩個表:
(A)
(B)
其中的元件(A)指向(B)的主鍵;所以FK和PK之間有3個一對一的關係。 我認爲3個OneToOne語句具有不同的mappedBy條件不是要走的路,mh?已經漫長的一天 - 我可能只是不明白;)
感謝您的幫助!
如果我理解正確的話,你希望你的數據庫是這樣的:
tableA
- id
- fromCompanyId (references tableB.id)
- toCompanyId (references tableB.id)
- viaCompanyId (references tableB.id)
tableB
- id
- description
如果是這樣,你可以肯定這一點。您只需要重寫關係的默認列名稱,以便每個關聯都有自己的列名稱,而不是返回到默認名稱,這會使三個關聯具有相同的名稱,從而導致出現問題。
我並不完全同意OneToOne,但我認爲這是一個有意識的決定。
非常感謝你 - 現在睡了幾個小時後,我重新思考了自己的能力;)並且感到有些懊惱你。 – henning 2010-12-01 10:06:06
你當然可以用一對一的關係做到這一點。你將在你的A類中有三個公司對象和適當的映射。
如果我們能看到代碼和hibernate映射,這將有所幫助。
實現帶3間多對一的關係類指着ClassB的
@Entity
class ClassA {
//@ID
//private id;
@ManyToOne
private ClassB from;
@ManyToOne
private ClassB toCompany;
@ManyToOne
private ClassB viaCompany;
}
是行不通的,因爲每一個實體需要一個ID最簡單的方式。 - 您可以嘗試通過使用組合ID(由三個關聯組成)來克服這個問題,但是我想這會導致很多麻煩來實現由與其他實體關聯組成的ID。
@see Hibernate/persistence without @Id
Hibernate提供了另一種方法是所謂的三元協會。 - 在這種情況下,您以三元m:n關係的形式爲完整表A建模。 - 但這也是一項非常複雜的任務。
@see http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html#collections-ternary
這是絕對OneToOne,而不是多對一?如果表A是可以說發貨表,那麼表B中的一家公司只發貨一件? – Qwerky 2010-11-30 15:40:20