【发布时间】:2020-10-20 20:21:53
【问题描述】:
我有两个实体,User 和 Roles,每个实体都具有活动布尔参数和 ManyToMany 关系。
这个布尔参数用于逻辑删除。
当我在下面运行此查询时,为什么结果包含非活动角色?
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
//Select
Root<User> user = query.from(User.class);
//Join
SetJoin<User, Role> role = user.joinSet("roles", JoinType.LEFT);
Predicate rolesActivePredicate = builder.isTrue(role.get("active"));
role.on(rolesActivePredicate);
query.multiselect(user).distinct(true);
//Where
Predicate usernamePredicate = builder.equal(user.get("username"), username);
Predicate activePredicate = builder.isTrue(user.get("active"));
query.where(usernamePredicate, activePredicate);
TypedQuery<UnikUser> typedQuery = em.createQuery(query);
return Optional.of(typedQuery.getSingleResult());
【问题讨论】:
-
如果您没有充分的理由怀疑该问题是由 jpa 2.2 引起的,则应使用
jpa标签代替,以吸引更多答案。出于同样的原因,您应该添加criteria-api标签
标签: java hibernate jpa criteria-api