2012-11-13 3 views
0

에 가입하기 전에 필터 데이터를 < -> 회원 < - 관계> 그룹 :JPA : 나는 고전적인 사용자를 가지고

@Entity 
public class User 
{ 
    @Id 
    private Long id; 
    private String name; 
    @OneToMany(mappedBy = "user") 
    private List<Membership> memberships 
} 

@Entity 
public class Group 
{ 
    @Id 
    private Long id; 
    private String name; 
    @OneToMany(mappedBy = "group") 
    private List<Membership> members; 
} 

@Entity 
public class Membership 
{ 
    @Id private Long id; 
    private String status; 
    @ManyToOne private User user; 
    @ManyToOne private Group group; 
} 

가 지금은 기존의 모든 그룹과 또한에 관심이 원하는는 알고 특정 사용자의 회원 상태 (있는 경우). 결과는 Group 및 Membership 객체 (또는 특정 사용자에 대한 멤버쉽이없는 경우 Group 객체 및 null)의 튜플이어야합니다. SQL에서 그게 내가 관심이있는 회원 자격의 사용자에 대한 가입하기 전에 데이터를 필터링 조인 조건에서

select g.*, m.* from `group` g left join membership m on g.id = m.group_id and m.user_id = 1 

공지 사항 추가 제한 and m.user_id = 1 같은 것을 할 것이다.

그럴 수 없어 JPA로 이것을 수행하는 방법을 찾는 것 같습니다. 필자가 아는 한, 조인의 subselect는 JPA에서는 불가능하며 위와 같은 것은 JPQL에서 직접 작성할 수 없습니다.

내가 여기 잘못된 길을 완전히 지나친 것처럼 보였고, 이것에 대한 신선한 시각을 가진 사람이 나에게 포인터를 줄 수 있다면 감사 할 것입니다.

업데이트 :

JSR 338은 (JPA 2.1) ON 조건에 대한 지원을 추가 할 것으로 보인다. 그때까지 어떻게이 한계를 극복 할 수 있습니까?

답변