CriteriaBuilder OffsetDateTime Сравнение - PullRequest
0 голосов
/ 23 марта 2020

Я использую Springboot и хотел бы реализовать API «поиска» для сущности, имеющей атрибут «OffsetDateTime».

Атрибут имеет тип «OffsetDateTime» в моей сущности Hibernate:

@Column(name = "creation_date")
    private OffsetDateTime creationDate;

Атрибут, который я получаю от API, также имеет тип "OffsetDateTime".

Я использую спецификацию Springboot со значением OffsetDateTime в качестве crit.get_getValue ():

@Override
    public Predicate toPredicate(Root<Job> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder builder) {
          return builder.equal(root.get("creationDate"), criteria.getValue());
    }

Но приведенный выше код не возвращает мне сущность с указанной датой

Однако следующий код делает:

@Override
        public Predicate toPredicate(Root<Job> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder builder) {
              Predicate predicate = builder.between(root.<OffsetDateTime>get("creationDate"),
                        ((OffsetDateTime) criteria.getValue()).minus(1, ChronoUnit.MILLIS),
                        ((OffsetDateTime) criteria.getValue()));
        }

В моей БД у меня есть "2020 -03-12 17: 25: 11.047 ", и значение, которое я передаю API, равно" 2020-03-12T17: 25: 11.047 + 01: 00 ". Я нахожусь во Франции, поэтому у меня смещение на 1 час, и время сохраняется как местное время в БД, но, похоже, это не проблема, так как второе решение возвращает нужную мне сущность.

Знаете ли вы, почему первое решение не возвращает мне сущность, и как я мог получить сущность без необходимости устанавливать интервал в 1 миллисекунду?

...