Мне нужно получить данные из базы. Есть две переменные LocalDate startDate и LocalDate endDate. Запрос может быть:
startDate-null- нужно выбрать все записи от startDate по текущую дату.
null-endDate-нужно выбрать все записи до endDate.
startDate-endDate- выбрать все записи от startDate до endDate.
null-null- выбрать все записи.
Метод поиска в базе:
CriteriaBuilder cb = manager.getCriteriaBuilder();
CriteriaQuery<Supply> query = cb.createQuery(Supply.class);
Root<Supply> supplyRoot = query.from(manager.getMetamodel().entity(Supply.class));
List<Predicate> predicates = new ArrayList<Predicate>();
if(startDate!=null && endDate!=null){
Predicate betweenPredicate = cb.between(supplyRoot.<LocalDate>get("arrivalDate"), startDate, endDate);
predicates.add(betweenPredicate);
}else if(startDate!=null && endDate == null){
Predicate greaterThanPredicate = cb.greaterThanOrEqualTo(supplyRoot.<LocalDate>get("arrivalDate"), startDate);
predicates.add(greaterThanPredicate);
} else if(startDate == null && endDate!= null){
Predicate lessThanPredicate = cb.lessThanOrEqualTo(supplyRoot.<LocalDate>get("arrivalDate"), endDate);
predicates.add(lessThanPredicate);
}
if(!predicates.isEmpty()){
query.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
query.select(supplyRoot);
}
return manager.createQuery(query).getResultList();
Проблема в том что при поиске между двумя датами возвращается только первое значение из базы. Например в базе есть дата 25.12.2016. Если сделать запрос на выбор с 24.12.2016 по 26.12.2016 то не находит ничего.
База MySQL, тип столбца date.
Подскажите где может быть проблема?
Продвижение своими сайтами как стратегия роста и независимости