gpt4 book ai didi

datetime - JPA2 标准和 Java 8 日期和时间 API

转载 作者:行者123 更新时间:2023-12-04 04:21:12 26 4
gpt4 key购买 nike

我尝试将 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 来过滤 上的结果集本地日期 而不是日期?之前使用的 'between' 不适用于 LocalDate 实例。

最佳答案

用我的 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();

乃至
cb.between(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(begin), cb.literal(end))

按预期工作。究竟是什么导致您的代码出现问题?也许 <LocalDateTime>不见了?

关于datetime - JPA2 标准和 Java 8 日期和时间 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com