【发布时间】:2019-07-31 14:37:53
【问题描述】:
在我们的数据库中,我们有缓存系统,它对查询绑定参数很敏感。
我创建了以下查询:
@Override
public Predicate toPredicate(Root<Position> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
query.distinct(true);
final Collection<Predicate> predicates = new ArrayList<>();
Join<Position, ManagersPositions> managersPositionsJoin = root.join("managersPositions", JoinType.INNER);
Predicate managerPredicate = criteriaBuilder.equal(managersPositionsJoin.get("managerId"), managerId);
predicates.add(managerPredicate);
if (onlyDirect) {
Predicate equalsDirect = criteriaBuilder.equal(managersPositionsJoin.get("isDirect"), true);
predicates.add(equalsDirect);
}
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
它会产生以下查询:
select
distinct position0_.id as id1_69_0_,
...
where managerspo1_.manager_id=22
and managerspo1_.is_direct=?
我必须使用 2 个绑定参数发送请求,例如:
where managerspo1_.manager_id=?
and managerspo1_.is_direct=?
如何解决第一个“?”的问题?
【问题讨论】:
-
你为什么不用
criteriaBuilder.parameter()? -
criteriaBuilder.parameter()with criteriaBuilder.equal(..., parameter) 具有相同的结果。
标签: java jpa-2.0 hibernate-criteria