JAVA 条件 API 我需要获取从特定日期开始经过的时间
JAVA Criteria API I need to get the Time Passed From a specfic Date
我需要 select 数据库中创建日期仅过去 5 天的所有可用记录
更多描述。
我需要获取创建后 1 天或 2 天后时间过去的所有订单。
我的意思是我可以从谓词对象中的当前日期减去创建日期,然后检查它是否等于经过的时间。
int passedDays = 5;
Page<Order> orders = orderRepository.findAll(new Specification<Order>() {
@Override
public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
// where created - now date = passedDays
predicates.add(cb.equal(root.<Date>get("createdAt"),passedDays));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
},pageable);
您应该使用 between
限制:
int passedDays = 5;
@Override
public Predicate toPredicate(Root<AuditTrail> root, CriteriaQuery<?> query,
CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
Instant now = Instant.now();
Instant then = now.minus(passedDays, ChronoUnit.DAYS);
predicates.add(cb.between(root.get("createdAt"), then, now));
// if your createdAt has type java.util.Date or java.sql.Date
// predicates.add(cb.between(root.get("createdAt"), Date.from(then), Date.from(now)));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
我需要 select 数据库中创建日期仅过去 5 天的所有可用记录 更多描述。 我需要获取创建后 1 天或 2 天后时间过去的所有订单。
我的意思是我可以从谓词对象中的当前日期减去创建日期,然后检查它是否等于经过的时间。
int passedDays = 5;
Page<Order> orders = orderRepository.findAll(new Specification<Order>() {
@Override
public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
// where created - now date = passedDays
predicates.add(cb.equal(root.<Date>get("createdAt"),passedDays));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
},pageable);
您应该使用 between
限制:
int passedDays = 5;
@Override
public Predicate toPredicate(Root<AuditTrail> root, CriteriaQuery<?> query,
CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
Instant now = Instant.now();
Instant then = now.minus(passedDays, ChronoUnit.DAYS);
predicates.add(cb.between(root.get("createdAt"), then, now));
// if your createdAt has type java.util.Date or java.sql.Date
// predicates.add(cb.between(root.get("createdAt"), Date.from(then), Date.from(now)));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}