這是一個設計模式問題。這裏是場景: 我使用EJB3.0和JPA。例如,假設我有一個可以屬於組的用戶。所以在我的用戶實體中,我有一個方法getGroups(),它可以延遲地獲取組。我有一個userDAO的是它有一個方法無狀態會話bean
用戶的getUser(INT UID)在我的JSF支持bean組合JPA,EJB和JSF託管bean的首選設計模式是什麼?
現在我注入的UserDAO的遠程接口,並調用它的getUser得到用戶bean。但是我無法訪問user.getGroups,因爲它是一個分離的實體。所以我可以在這裏想到三種方法:
- 在我的dao方法中,我也熱切地獲取組,以便它們也可以在遠程用戶實體中訪問。但與此相關的問題是,團體本身可能會懶惰地取得關係,那些我也不得不急於取得,那些可能有更懶惰的取得關係等等。所以我最終會發送一個重量很大的物體,這些物體大部分屬於我不需要的。
我發送用戶,因爲它是和依靠我的客戶端不能調用它的getGroups。我可以在UserDAO的是
列表<整數> getGroupsIds(INT用戶id)
提供一個單獨的方法和我有也有類似的方法GroupDao getGroup(INT的groupId)等方法偷懶關係的IDS。第三種選擇是不發送這些JPA實體,並創建其他POJO,如UserInfo,GroupInfo等,它們只包含每個實體的基本屬性並將它們發送出去。而且我可以在DAO的方法來獲取這些實體像不同的關係:
列表<的GroupInfo > getGroupsForUser(INT UID)
列表<的UserInfo > getUsersInGroup(INT GID)
所以哪些是首選模式。還是有一些其他人在這裏使用的模式?
我懷疑的最簡單的方法順利整合這些是使用Seam:http://www.jboss.com/products/seam/ – skaffman
呀從什麼小我知道煤層可能是目前最好的辦法,但我我堅持不使用Seam –
你是在一個特定的JPA實現,或只是問一般。 EclipseLink和Kodo都將按需加載這些內容。或者開發人員可以請求進行一次熱切的獲取。 –