Я использую hibernate 5 с аддоном hibernate-java8 для использования полей LocalDateTime
. Теперь у меня есть объект, который имеет поле даты и поле пользователя, как в:Hibernate: использование LocalDateTime для запроса диапазона
@Entity
public class Transaction {
// ...
private User user;
private LocalDateTime date;
// ..
}
Теперь я просто хочу, чтобы запросить все сделки пользователей в течение определенного интервала времени. Поэтому я использую следующий запрос:
SELECT t FROM Transaction t WHERE t.user = :owner AND t.date BETWEEN :from AND :to
Странно достаточно, чтобы этот запрос не дал мне никаких результатов. Я также попытался использовать операторыи >
, но это тоже не помогло. Когда я оставляю часть диапазона времени, я получаю правильный список транзакций для пользователя. Когда я выполняю SQL-запрос, сгенерированный Hibernate в workbench MySQL, я также получаю ожидаемые результаты. Я использую следующий фрагмент кода для выполнения (с именем) запрос:
public <T> List<T> findList(Class<T> type, String queryName,
Map<String, Object> params) {
final EntityManager em = this.entityManager.get();
final TypedQuery<T> query = em.createNamedQuery(queryName, type);
params.forEach(query::setParameter);
return query.getResultList();
}
Это называется просто предоставление перечисленных выше запрос и отображение именованных параметров, как:
findList(Transaction.class, Transaction.BY_USER_AND_RANGE,
ImmutableMap.of("owner", owner, "from", from, "to", to));
В моем тестовом случае сохранялось одна транзакция с текущей датой и создала диапазон от вчера до завтра для запроса. Проверка таблицы в рабочем месте MySQL показывает, что транзакция есть и что поле даты имеет правильный тип и содержит правильное значение. Однако мой запрос не даст мне никаких результатов.
Есть ли что-нибудь, что мне не хватает?
Каковы значения от и до? Логическое объяснение, если это от больше, чем до. Или что ваши даты не между ними. –