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



我使用JPA 2.0, Hibernate 4.1.0。最后,MySQL 5.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查询,以便我获得用户所在的所有组?我在选择"组"时遇到了麻烦,因为标准子句是围绕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<Group>。试试这个:

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);

最新更新