2011-06-03 50 views
2

我有幾個關於JPA最佳實踐的小問題(通過hibernate)。JPA:單向最佳實踐OneToMany

我的第一個問題是關於一個領域模型的複雜性。 我有一個模型賬戶代表一個賬戶;) 一個賬戶與其他對象有很多關係。他們中的很多人都需要通過Account對象來知道,但其中一些只需要知道其他部分。

例如,我有一個消息模型,它表示發送到帳戶的消息。 我真的不想用新的關係覆蓋我的賬戶模型,因爲它已經有很多關係,所以我決定在賬戶和模型之間建立單向關係。

所以,我只在Message類中映射了與ManyToOne關係的關係,而不是在Account中。

你認爲這是一個很好的做法,以避免在模型類(帳戶在我的情況)太多關係?或者你認爲我必須將所有關係映射到我的帳戶類中的帳戶。那麼,最好的做法是什麼,單向或雙向關係?

我的第二個問題來自單向的情況。當我刪除一個帳戶時,由於單向關係,所有引用此帳戶的郵件現在無法加載,因爲父帳戶缺失。

維護非損壞數據庫的最佳做法是什麼? - 刪除所有關係時,賬號被刪除(可在性能方面非常危險) - 使該刪除逐步所有關係,並在此過程中

感謝您的所有建議停用賬戶工作;)

回答

2

如果您不需要從帳戶導航到其郵件(在代碼或查詢中),則可以使用單向關係而不會出現問題。

無論您選擇哪種解決方案,都應該在消息與其帳戶之間定義外鍵約束。這樣,刪除一個帳戶而不首先刪除它的消息將引發異常。這就是你保證數據一致性沒有損壞的方法。如果您希望能夠在不刪除郵件的情況下刪除帳戶,那麼您應該首先將其帳戶從其郵件中分離出來,方法是將其帳戶ManyToOne字段設置爲null。當然,關係必須標記爲可選,並且forein鍵列必須可以爲空。

注意,雖然,其從該帳戶的消息(即使它不是從代碼的其餘部分訪問)的關係將允許你

  • 利用這個關係裏面查詢
  • 集級聯刪除關係,以便在刪除帳戶之前自動刪除所有消息。