Mysql 如何在JPA(不是JPQL)中选择实体的一部分?
我正在使用JPA2.0、Hibernate4.1.0.Final和MySQL5.5。我有两个班,小组和小组成员。GroupMember类链接到Group类,如下所示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 @
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);
未编译,可能有编译器错误消息。。。