2013-07-25 43 views
2

我試圖在hibernate中實現多對多的多態關聯。休眠中的多對多表格

我有一個接口Animal和兩個實施類CatDog。我還有另外一類食品,我正在通過數據庫多對多的關係將動物界面與食品類連接起來。我試圖瞭解如何通過像Ruby on Rails實現這樣的多態關聯來映射它。

的多對多關聯應該是這樣的:

------------------------------------------------- 
| food_id | animal_type | animal_id | 
------------------------------------------------- 

我一直工作在這一段時間,我不知道如何在Hibernate中實現這一點。

回答

-3

這並不十分清楚你希望你的數據庫映射到什麼模型,但通常Hibernate映射模型是現實的,所以我假設一個食物被許多動物食用,動物吃很多食物。 在其中包含food_id和animal_id這種情況下,你需要在你的數據庫FOOD_ANIMAL一個鏈接表:

FOOD_ANIMAL: food_id INT(11),animal_id INT(11)

那麼你需要一個列表食物在動物中的反應,或反之亦然。使用@ManyToMany進行映射。有很多關於如何做到這一點的例子,例如: http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example-annotation/

恐怕我不能幫助更多的沒有代碼的例子,但我希望這有助於!

+0

這將是一個簡單的 - 很多很多 - 表...我正在尋找一些更復雜的東西...因爲動物是一個接口沒有一個動物的唯一ID,而不是類名稱和該特定動物類型的ID用作多鍵... – Nayish

+0

您的界面不應該模擬對象本身。您可以使用hibernate將您的表(包含唯一ID)的動物與使用@table的Java模型進行映射,並且您的接口的標準將用作使用hibernate更新數據庫的數據訪問對象。我建議爲你的情況使用標準模式,因爲它是一種簡單的m-to-m關係。 –

+0

你的解決方案的問題是,如果我決定明天創建一個Pet接口,我把貓,狗和岩石(它不是動物界面),他們所有的動物和寵物將不得不分享一個id序列...然後後來當我決定添加另一個名爲Thing的界面時,我有搖滾,電梯和摩托車,他們也必須使用相同的ID序列,因爲Dog必須具有相同的ID序列,因爲搖滾和搖滾必須與摩托車具有相同的ID。 ..我們可以添加更多的例子。問題是具體的,我怎樣才能創建這種類型的保利協會... – Nayish