이것은 디자인 패턴 질문입니다. 다음은 시나리오입니다. JPA에서 EJB3.0을 사용하고 있습니다. 예를 들어 그룹에 속할 수있는 사용자가 있다고 가정 해 보겠습니다. 그래서 내 User 엔티티에서 getGroups() 메서드를 사용하여 그룹을 느리게 가져옵니다. 그리고 나는 방법을 가지고 무 상태 세션 빈 인 UserDao이
사용자 인 getUser (INT의 UID) 내 JSF의 백업 빈에서 이제JPA, EJB 및 JSF 관리 Bean을 결합하는 데 선호되는 디자인 패턴은 무엇입니까?
내가 UserDao의 원격 인터페이스를 주입하고 얻을 그것에 인 getUser를 호출 사용자 bean. 하지만 detached 엔티티이기 때문에 user.getGroups에 액세스 할 수 없습니다. 그래서 여기에 세 가지 접근 방식을 생각할 수 있습니다 :
- 내 DAO 방법에서는 열심히 또한 원격 User 엔터티에서 액세스 할 수 있도록 그룹도 가져옵니다. 그러나이 문제는 그룹 자체가 느슨하게 가져온 관계를 가질 수 있으며 또한 열심히 가져와야 할 것이고 더 편한 관계를 갖는 등의 문제가있을 수 있습니다. 그래서 나는 내가 필요로하지 않을 재산의 대부분을 무거운 체중 물건으로 보내 게 될 것입니다.
나는 사용자를있는 그대로 보내며 내 클라이언트에 의존하여 getGroups를 호출하지 않습니다. 나는
목록 < 정수 > getGroupsIds (INT 사용자 ID)
입니다 userdao에 별도의 방법을 제공 할 수 있습니다 그리고 나는 유사한 방법을 가지고 GroupDao getGroup (INT의 groupId)와 다른 방법이 게으른 관계의 ID를 얻을 수 있습니다.세 번째 옵션은 이러한 JPA 엔티티를 전혀 전송하지 않고 각 엔티티의 기본 속성 만 포함하는 UserInfo, GroupInfo 등의 다른 POJO를 작성하여 전송하는 것입니다.
목록 <GROUPINFO> getGroupsForUser (INT의 UID)
목록 < 사용자 정보 > getUsersInGroup (INT의 GID) 그래서
: 그리고 같은 다른 관계에 대한 이러한 개체를 얻을 수의 DAO의 메소드를 가질 수 있습니다 이 중 어느 것이 바람직한 패턴인지를 결정합니다. 아니면 사람들이 여기에서 사용하는 다른 패턴이 있습니까?
이들을 원활하게 통합하는 가장 쉬운 방법은 Seam을 사용하는 것입니다. http://www.jboss.com/products/seam/ – skaffman
그래, 제가 가장 좋은 방법이 될 수있는 Seam에 대해 조금은 알지만, Seam을 사용하지 않고 붙어 있습니다. –
특정 JPA 구현에 있는지 또는 일반적으로 묻는 중입니다. EclipseLink & Kodo는 필요에 따라이를로드합니다. 또는 개발자가 열렬한 가져 오기를 요청할 수 있습니다. –