我正在尝试使用CriteriaBuilder的between从数据库中过滤掉一些数据。我将java.util.Date用于输入和实体列。我总是会按输入日期获得结果-1.例如如果我的输入日期为16-12-2019,那么我也将获得15-12-2019的数据。我无法理解这种奇怪的行为。我正在使用以下方法:

predicates.add(criteriaBuilder.between(root.get(Constants.COL_REGISTRATION_DATE),
                    registrationStartDate, registrationEndDate));


我也尝试了以下方法,但结果仍然相同。

Predicate startDatePredicate = criteriaBuilder.greaterThanOrEqualTo(root.get(Constants.COL_REGISTRATION_DATE), registrationStartDate);
            Predicate endDatePredicate = criteriaBuilder.lessThanOrEqualTo(root.get(Constants.COL_REGISTRATION_DATE), registrationEndDate);

            predicates.add(criteriaBuilder.and(startDatePredicate, endDatePredicate));


有没有人遇到这样的问题。请帮我解决这个问题。

最佳答案

请尝试:

predicates.add(criteriaBuilder.between(root.get(Constants.COL_REGISTRATION_DATE),
                LocalDate.parse(registrationStartDate),
                LocalDate.parse(registrationEndDate))
);

关于java - java util与Criteria api的日期比较未按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59747364/

10-09 13:16