Hub*_*her 9 datetime java-8 jpa-2.1
我尝试将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));
..
Run Code Online (Sandbox Code Playgroud)
现在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实例.
对于我的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();
Run Code Online (Sandbox Code Playgroud)
乃至
cb.between(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(begin), cb.literal(end))
Run Code Online (Sandbox Code Playgroud)
如预期般运作。究竟是什么导致您的代码出现问题?也许<LocalDateTime>
不见了?