JPA2 Criteria和Java 8 Date&Time API

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实例.

Ste*_*ich 5

对于我的LocalDateTimeConverter,我只是尝试greaterThanOrEqualTolessThan检查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>不见了?