0

我有一个经典的 User <-> Membership <-> Group 关系:

@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 对象,如果特定用户不存在 Membership,则为 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 做到这一点的方法。据我所知,JPA 无法在连接中进行子选择,并且无法直接在 JPQL 中编写类似上述内容。

看来我在这里完全走错了路,如果有对此有新看法的人能给我指点,我将不胜感激。

更新:

JSR 338 (JPA 2.1)似乎会增加对 ON 条件的支持。在那之前,我该如何解决这个限制?

4

1 回答 1

0

如果您使用的是 EclipseLink,则 EclipseLink 2.4 支持 ON 子句,

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON

否则,您可以使用本机 SQL 查询。

于 2012-11-13T14:14:42.193 回答