hibernate中的關係處理心得交流

2021-08-30 07:44:29 字數 1261 閱讀 5520

以前使用hibernate的時候關係都是根據業務來處理的,也就是物件間的關係沒有設定,僅僅設定乙個id外來鍵來做關聯,感覺物件的管理蠻方便的,研究了領域驅動設計很長時間了。最近乙個專案使用了hibernate的關係,但是怎麼處理起來都覺得彆扭,舉個例子:

使用者和使用者組以及角色三個實體:即:user,usergroup,role他們的關係為user和usergroup為many-to-many,usergroup和role為many-to-many,關係都為雙向的。

開始的整體結構為:

dao層:封裝簡單的dao的操作,沒有處理關聯關係

service層:處理業務邏輯,涉及到關係的處理,呼叫dao層

彆扭得地方:

1.如果在usergroup對user上設定了級聯插入關係:

那麼當插入usergroup的時候,usergroup中的user集合也會插入,但是這個時候如果有業務上的要求,使用者名稱必須唯一,級聯插入的時候拋異常,的確這個情況我們還是可以處理的,但是必須知道會拋什麼異常,然後catch住了之後,丟擲自己的業務異常,感覺處理起來不是很流暢,如果在user設定對usergroup級聯插入,情況可能更複雜,比如usergroup對role也設定了級聯插入。不知道這種情況大家如何處理。

2.如果所用的級聯關係都沒有設定,全部由業務來決定

a.如果使用者在前台在儲存user時,設定了user中的usergroup集合,但是usergroup集合並沒有在庫中,那麼我們要先儲存usergroup集合到資料庫中,同時usergroup又包含role的集合,也是先儲存到資料庫中,因為是ejb專案涉及到遠端呼叫,確保一次呼叫能做更多的操作。

這樣的話,會發現userservice會有很多**會和usergroupservice相同,因為儲存user的時候涉及到usergroup儲存,可能還會涉及到查詢,這樣如果不是**copy,就是userservice依賴usergroupservice顯然不合理,當然usergroup和userservice可以合併成乙個service,但是可能會導致合併後的service膨脹。可能是service劃分不合理,不知道大家是怎麼處理的。

b.鑑於以上原因usergroupservice和userservice僅僅處理簡單的插入,處理簡單的關係,然後提供乙個供遠端呼叫的會話門面,門面中包含usergroupservice和userservice,然後處理關係,可以很好解決a中遇到的情形,但是會發現service中有很多方法只是簡單的呼叫dao中的方法,另外門面中也有很多方法只是簡單的呼叫service中的方法,感覺處理的很彆扭。

各位牛人,大家一起交流一下,不知道大家理解清楚了沒有?

hibernate中多表對映關係配置

1.one to many一對多關係的對映配置 在一的一方實體對映檔案中配置 set name linkmen inverse true key column lkm cust id key one to many class linkman set 一對多 多對一關係中,放置sql語句冗餘.一般選...

Hibernate 中處理Oracle的字段預設值

方法一 1 在hibernate的xml配置檔案中對有預設值欄位的property新增 insert false update false 注 insert false update false 的作用是不對當前字段進行insert和update操作,這樣hibernate就不會在未指明預設列的情況...

hibernate物件關係

hibernate學習第二天總結 一對一的關係有 共享主鍵見表方式 唯一外來鍵見表方式 共享主鍵建表方式 即一張表的主鍵,做了主鍵又做了外來鍵 person類裡面有乙個passport類的關聯屬性,名字叫做passport,根據傳遞性持久化,要儲存person物件的時候,同時要儲存 passport...