How do I write a JPA criteria query that matches a collection exactly?

陌路散爱 提交于 2019-12-01 08:12:12

You will need different roots for each and every user, as each of them is different from the others (untested):

final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
CriteriaQuery<Group> criteria = builder.createQuery(Group.class);
final List<Predicate> predicates = new ArrayList<Predicate>();
final Root<Group> group = criteria.from(Group.class);
for (final User user : users)
{
    final Root<GroupMember> memberRoot = group.join(Group_.members);
    final Predicate p = builder.equal(memberRoot.get(GroupMember_.user), user);
    predicates.add(p);
}   // for
predicates.add(builder.equals(builder.count(group.get(Group_.members)),users.size()))
criteria.where(builder.and(predicates.toArray(new Predicate[predicates.size()])));
final TypedQuery<Group> results = m_entityManager.createQuery(criteria);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!