我使用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);