问题描述
我对CriteriaBuilder API有疑问。我是JPA的新手,我想创建(和)组合。
predicates.add(cb.equal(root.get("title"),title));
predicates.add(
cb.or(cb.between(root.get("startedAt"),startTime,endTime),cb.between(root.get("endedAt"),cb.and(
cb.greaterThanorEqualTo(root.get("endedAt").as(Date.class),cb.lessthanorEqualTo(root.get("startedAt").as(Date.class),startTime))
));
输出结果
where title = ? and (started_at between ? and ? or started_at between ? and ? or
ended_at>=? and started_at <=?)
我想要的是结果
where title = ? and (started_at between ? and ? or started_at between ? and ? or
(ended_at>=? and started_at <=?)
)
如何使用CriteriaBuilder实现这一目标?谢谢您的指教!!!
解决方法
您尝试过吗?
predicates.add(cb.and(cb.equal(root.get("title"),title),cb.or(cb.or(cb.between(root.get("startedAt"),startTime,endTime),cb.between(root.get("endedAt"),endTime)),cb.and(cb.greaterThanOrEqualTo(root.get("endedAt").as(Date.class),cb.lessThanOrEqualTo(root.get("startedAt").as(Date.class),startTime)))
));