Mysql 如何在JPA(不是JPQL)中选择实体的一部分?

Mysql 如何在JPA(不是JPQL)中选择实体的一部分?,mysql,hibernate,jpa,jpa-2.0,Mysql,Hibernate,Jpa,Jpa 2.0,我正在使用JPA2.0、Hibernate4.1.0.Final和MySQL5.5。我有两个班,小组和小组成员。GroupMember类链接到Group类,如下所示 public class GroupMember { @Id @NotNull @GeneratedValue(generator = "uuid-strategy") @Column(name = "ID") private String id; @ManyToOne @

我正在使用JPA2.0、Hibernate4.1.0.Final和MySQL5.5。我有两个班,小组和小组成员。GroupMember类链接到Group类,如下所示

public class GroupMember
{

    @Id
    @NotNull
    @GeneratedValue(generator = "uuid-strategy")
    @Column(name = "ID")
    private String id;

    @ManyToOne
    @JoinColumn(name = "USER_ID", nullable = false, updatable = true)
    private User user;

    @ManyToOne
    @JoinColumn(name = "GROUP_ID", nullable = false, updatable = true)
    private Group group;
如何编写JPA查询,以便获得用户所在的所有组?我很难只选择“组”,因为criteria子句是围绕GroupMember对象构建的

    final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
    CriteriaQuery<GroupMember> criteria = builder.createQuery(GroupMember.class);
    final Root<GroupMember> groupMemberRoot = criteria.from(GroupMember.class);
    criteria.multiselect(groupMemberRoot.get(GroupMember_.group)).where(builder.equal(groupMemberRoot.get(GroupMember_.user), user));
    TypedQuery<Group> results = m_entityManager.createQuery(criteria);  // doesn’t compile

最后一行没有编译,希望有人知道正确的语法是什么。

您的代码没有编译,因为您必须创建一个CriteriaQuery。试试这个:

final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
CriteriaQuery<Group> criteria = builder.createQuery(Group.class);
final Root<GroupMember> groupMemberRoot = criteria.from(GroupMember.class);
criteria.select(groupMemberRoot.get(GroupMember_.group));
criteria.where(builder.equal(groupMemberRoot.get(GroupMember_.user), user));
TypedQuery<Group> results = m_entityManager.createQuery(criteria);

未编译,可能有编译器错误消息。。。