条件API不在@ElementCollection

时间:2017-09-15 13:48:57

标签: java jpa eclipselink jpa-criteria

如果Permission是枚举,是否可以使用JPA Criteria API选择没有特定权限的所有用户:

@Entity
public class User {

    @ElementCollection
    @CollectionTable(joinColumns = @JoinColumn(name = "USER_ID"))
    private Set<Permission> permissions = new HashSet<>();

}

我目前的方法(什么都不返回):

// em => EntityManager
// cb => CrieriaBuilder
Root<User> root = query.from(User.class);
query.select(root);
SetJoin<User, Permission> join = root.joinSet("permissions");
query.where(cb.not(cb.equal(join, Permission.RULE_THEM_ALL)));
List<User> result = em.createQuery(query).getResultList();

1 个答案:

答案 0 :(得分:0)

我最终使用子查询来选择具有特定权限的所有用户,并将其从结果集中排除。

CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);
query.select(root);

Subquery<Long> subquery = query.subquery(Long.class);
Root<User> subroot = subquery.from(User.class);
SetJoin<User, Permission> join = subroot.join("permissions");
subquery.select(subroot.get("id")).where(cb.equal(join, Permission.RULE_THEM_ALL));

query.where(root.get("id").in(subquery).not());