我尝试将Java Web应用程序移植到新的Java 8 Date& Time API(使用'LocalDate'和'LocalDateTime'等类型)
在Java 7中,可以在JPA2条件API中使用java.util.Date来过滤日期上的结果集。通常,人们可以通过添加谓词来实现这一点,例如
..
predicatesList.add(builder.between(from.get(AccountLog_.valueDate), fromDate, toDate));
..
现在JPA2还不支持新的Java 8 Date& Time API(LocalDate和LocalDateTime)。使用自己的“属性转换器”,已经可以按照博客http://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/
中的描述实现与实体的合作现在我的问题是:如何在JPA2条件API中使用LocalDate和LocalDateTime来过滤 LocalDate 而不是Date的结果集?之前使用的“之间”不适用于LocalDate实例。
答案 0 :(得分:4)
使用我的LocalDateTimeConverter
,我只是尝试greaterThanOrEqualTo
和lessThan
来检查LocalDateTime
范围,例如
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Meal> query = cb.createQuery(Meal.class);
Root<Meal> m = query.from(Meal.class);
query.select(m);
query.where(
cb.greaterThanOrEqualTo(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(begin)),
cb.lessThan(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(end))
);
return em.createQuery(query).getResultList();
甚至
cb.between(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(begin), cb.literal(end))
按预期工作。究竟是什么导致您的代码出现问题?可能<LocalDateTime>
遗失了吗?