2012-08-06 180 views
4

我所遇到的一些SO討論和其他職位(例如hereherehere)其中使用複合主鍵與JPA被描述或者作爲東西,如果能夠避免,或作爲遺留數據庫的必需品或具有「多毛」角落的情況。由於我們從頭開始設計一個新數據庫,並且沒有任何遺留問題需要考慮,因此建議或者說更安全一些,以避免使用JPA休眠EclipseLink?)的複合主鍵。JPA /休眠和複合鍵

我自己的感覺是,由於JPA發動機是足夠複雜,當然,像所有的軟件,並非沒有漏洞,它可能是最好遭受非規範化的表,而不是忍受對相關的錯誤運行的恐怖複合主鍵(理由是數字單列主鍵和外鍵是JPA引擎支持的最簡單用例,所以它應該儘可能沒有錯誤)。

回答

7

我已經試過這兩種方法,而我個人更喜歡避免以下幾個原因複合主鍵:

  • 可以創建包含id字段的超類,所以你不必在管它所有的實體。
  • 實體創建成爲一般
  • 更容易
  • JPA起到更好的引用到實體變得更容易。例如,將一串ID存儲在一個集合中,或者在網頁的查詢字符串中指定一個單獨的ID,只需要使用單個數字就可以大大簡化。
  • 您可以使用超類中指定的單個equals方法,該方法適用於所有實體)。
  • 如果使用JSF與您的數據庫客戶端

工作時,你可以做一個通用的轉換器

  • 容易地指定對象,但它藏漢帶來了一些不好的部分:

    • 非規範化量小
    • 使用未執行對象(如果您使用自動生成的ID,您應該)在某些情況下可能意味着麻煩,因爲相等方法等需要ID才能正常工作