0

我一直在使用數據模型很長一段時間。我現在認爲這個模型有缺陷,但我不確定如何改進它。在數據庫表級別繼承,Jpa加入策略

基本上,我的域名模型是父母尋求保姆/保姆和保姆尋求嬰兒照顧的小廣告網站。

域模型目前有由兩個ParentAccountChildminderAccount類的子類的基Account類。我也有基地廣告類,這是三個子類別ChildminderAdvertisement,ParentToParentAdvertismentParentToChildminderAdvertisement類。

大部分屬性都是通用的子類,因此位於超類。

要列出幾個不同的子類之間:

  • 一個ChildminderAccount可以有一個課程/恢復連接到它,但一個ParentAccount可能不會。
  • ChildminderAccount通過指定Childminder(通用)是否爲Nanny(特定)/ BabySitter(特定)/等)進一步細化。

這意味着ChildminderAccount子類與ParentAccount子類不具有的其他表具有關係。

繼承當前由JPA層使用連接策略實現(請參閱JPA文檔:@Inheritance(strategy=InheritanceType.JOINED))請參見圖。 enter image description here

我面臨着一些與當前的設計問題:

  • 我有運行的操作共同的基類的問題。
  • 我經常發現自己重新實現了子類的方法,我有太多的DAO。

正如我前面所說,我不知道如何改進設計:是否放棄產品總數繼承(DB級),還是去其他繼承策略...

任何線索歡迎。

回答

0

好了,JPA傢伙又造「繼承策略」的東西的原因是爲了與SQL表格時(通過JPA實體)更加緊密地模仿OO多態性。你確定你正在利用這個功能嗎?

例如,如果你希望所有賬戶類型項目(不管他們是否實際ParentAccount或ChildminderAccount),你可以這樣做:

SELECT a FROM Account a WHERE ...." 
+0

你好安德烈:那我怎麼處理的差異java的水平? – balteo 2012-03-05 13:08:18

+0

那麼,當你告訴它「選擇一個帳戶與一個」會effectivelly創建一個帳戶的實例,所以你只能訪問那些字段/方法。您也可以「從帳戶a中選擇ParentAccount a」,並在此處創建ParentACcount實例,以便您可以訪問這些字段。你也可以傳入「type」來告訴它你感興趣的bean是什麼類型(來自表中的整個繼承鏈)。 – 2012-03-05 13:12:09

+0

然後我不確定:你建議jpa單表繼承策略還是根本沒有jpa繼承? – balteo 2012-03-05 13:15:24