2012-04-18 68 views
2

我是JPA和CDI的新手,我嘗試使用這些框架創建企業應用程序。JPA CDI將DAO注入到實體

我得到了我可以如何注入豆類並保持一切整潔和無狀態。我也得到JPA加載關係等等,這樣我就不用擔心它了。我仍然使用我的DAO來查找特定的方法,並且可以創建新的實體。

據我所知,我不想注入到我的實體的東西,因爲他們由JPA管理,我需要使用關鍵字new創建一個新的實體(而不是加載)。

我習慣於用其他類來管理我的實體,例如,如果我們有一個用戶和一個組,我使用一個無狀態的bean來管理這個組(創建新的,找到其他類),並且這個無狀態bean使用我的DAO來檢索和發送數據。

我使用Group實體來管理用戶(也許這是錯誤的?),但我不想將DAO注入到組中,因爲它是一個實體。我知道這種設計有什麼問題,但我找不到最佳做法。

是否所有管理類都是EJB?我習慣於爲我的邏輯創建Domain類,我應該拋棄這個概念,把我所有的邏輯放在EJB中,並使用Entities來保存數據?

回答

1

我使用Group實體來管理用戶(也許這是錯誤的?)但是 我不想將DAO注入到組中,因爲它是一個實體。 I 知道這種設計有問題,但我找不到最好的 練習。

如果一個GroupUser s,將它映射爲一個集合(可能是OneToMany)。

使用另一個不同的bean來封裝持久性操作,例如, GroupServiceGroupDao。在這個bean中,你將注入一個EntityManger,它負責持久化(「管理用戶和組」)。

This tutorial應該給你一個開始。

是否所有管理類都是EJB?

當然不一定。但它有點難(閱讀:不可能)告訴不知道您的要求。我建議你用更多的信息添加孤立的問題,然後討論你的問題更容易...

作爲一個經驗法則:嘗試從業務邏輯和持久性操作中分離實體(組,用戶)(GroupService,。 ..Dao)。

我發現this book給出了關於post J2EE模式的極好的概述和討論。

+0

目前我的團隊有一個關係(列表)和一個UserDao其中包含entitymanager。我的問題是,如果我的Group類有UserDao,或者我應該有一個管理Dao的EJB?我也應該把自己的邏輯放在EJB中而不是放在我的實體中? – Rob 2012-04-18 14:55:10