2012-11-13 30 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; 
} 

現在我感興趣的是現有的所有羣組,另外想知道特定用戶的會員身份(如果存在)。 (如果用於特定用戶沒有成員存在或一個組對象和空)的結果應該是組元組和成員對象。在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做到這一點。據我所知,在加入子選擇是不可能的JPA和像上面的東西不能在JPQL直接寫入。

看來我已經完全得到了錯誤的軌道上,我將不勝感激,如果有人對這個新鮮的觀點可以給我一個指針。

更新:

似乎JSR 338(JPA 2.1)將增加對各種條件的支持。在那之前,我該如何解決這個限制?

回答