Я использую 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 миллисекунду?