1

不支持使用 s pring-boot 1.5.10(所以是当前的)来使用 Java8 日期/时间,因为默认情况下这个版本的 Spring Boot 使用. 为了实现这一点(Spring Boot 1.5.10),在覆盖版本的部分中起作用。 Hibernate 5.0.12.Finalpom.xml properties

<hibernate.version>5.2.12.Final</hibernate.version>

问题: 启用 Java8 日期/时间以覆盖休眠版本或以某种方式(如果是,那么如何?)将 JPA 2.2 用于 SPRING_BOOT 的最佳方法是什么?

编辑与休眠5.0.x我不断得到:

01 05 2001', 'd M yyyy'), ParseDateTime('02 05 2001', 'd M yyyy')); 嵌套异常是 org.h2.jdbc.JdbcSQLException: Heksadecymalny string z nieparzystą liczbą znaków: "2001-01-01 00:00:00.0" 具有奇数个字符的十六进制字符串:"2001-01-01 00:00:00.0" ; SQL 语句:INSERT INTO 保留 (ID, RESERVATION_NAME, DATE_FROM, DATE_TO) VALUES (1, 'res1', ParseDateTime('01 01 2001', 'd M yyyy'), ParseDateTime('02 01 2001', 'd M yyyy ')),

但是使用时5.2.12.Final一切正常。

4

3 回答 3

7

Hibernate 5.x 已经支持 Java 8 日期/时间 API,但在一个名为hibernate-java8.

使用 Maven,您可以像这样包含它:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.0.12.Final</version>
</dependency>

但是,从 Hibernate 5.2.x 开始,Hibernate 的基准 Java 版本是 Java 8,因此不再需要为 Java 8 日期/时间支持保留单独的模块。这就是它现在被合并到的原因hibernate-core,如迁移指南中所述:

Hibernate 5.2 是使用 Java 8 JDK 构建的,并且在运行时需要 Java 8 JRE(我们正在调查 Java 9 是否也可以工作)。这有很多含义:

  • hibernate-java8 模块已合并到 hibernate-core 中,现在原生支持 Java 8 日期/时间类型。

因此,为了回答您的问题,对于 Hibernate 5.0.x 和 Hibernate 5.1.x,支持新日期/时间 API 的官方方法是使用该hibernate-java8模块。

于 2018-02-26T10:29:17.713 回答
1

Hibernate 5 添加的功能之一是对 Java 8 类的支持,例如日期和时间 API,因此您可以将以下内容添加.jar到您的pom.xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.1.0.Final</version>
</dependency>
于 2018-02-26T10:32:35.893 回答
0

我遇到了同样的问题,并且使用spring-boot-parent(最终选择使用最新的 1.5.x 版本:1.5.16.RELEASE)和spring-boot-starter-data-jpa版本没有帮助。

最终有帮助的是添加对 5.1.X 版本的hibernate-java8依赖。正如 OP 正确指出的那样,默认情况下 Spring Boot 已经带来了这种依赖关系,但具有较低的 (==hibernate.version) 版本。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.1.0.Final</version><!--$NO-MVN-MAN-VER$-->
</dependency>
于 2018-09-27T01:45:34.867 回答