Сравнение дат с помощью JPA criteria API

516
31 декабря 2016, 14:33

Мне нужно получить данные из базы. Есть две переменные 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.

Подскажите где может быть проблема?

READ ALSO
Настройка Google Play Services в Android Studio

Настройка Google Play Services в Android Studio

Не могли бы вы описать, что нужно сделать по пунктам, чтобы подключить Google Play Services к своему приложению, а также сделать простой рейтинг участников

649
Widget с определенными TextView

Widget с определенными TextView

Как показывать только те TextView, которые нужно?

514
Как открыть Activity поверх другого активити?

Как открыть Activity поверх другого активити?

Есть приложения с несколькими экранами и активностямиКак можно сделать так, чтобы открывая активити2 оно не прекращало работу активити1,...

526