使用s pring-boot 1.5.10
(当前(使用java8日期/时间为不支持,因为默认情况下,此版本的Spring Boot使用Hibernate 5.0.12.Final
。为了实现此目标( Spring Boot 1.5.10 (在pom.xml
properties
部分中覆盖了版本。
<hibernate.version>5.2.12.Final</hibernate.version>
问题:启用Java8日期/时间覆盖Hibernate版本或某种程度上(如果是这样的话(的最佳方法是什么?
编辑使用Hibernate 5.0.x
,我继续得到:
由: org.springframework.jdbc.datasource.init.scriptStattatementFailedException: 无法执行URL的SQL脚本语句#1 [文件:./src/main/resources/db/h2/data-h2.sql]:插入 预订(ID,recervation_name,date_from,date_to(值(1, 'res1',parseDateTime('01 01 2001','d m yyyy'(,parseDateTime('02 01 2001','d m yyyy'((,(2,'res1',parseDateTime('01 02 2001','d M yyyy'(,parseDatetime('02 02 2001','d m yyyy'(,(3,'res3', ParseDateTime('01 03 2001','d M Yyyy'(,ParseDateTime('02 03 2001',, 'd m yyyy'((,(4,'res4',parseDateTime('01 04 2001','d m yyyy'(, ParseDateTime('02 04 2001','d m yyyy'(,(5,'res5', ParseDateTime('01 05 2001','d M Yyyy'(,ParseDateTime('02 05 2001',, 'd m yyyy'((;嵌套的异常是org.h2.jdbc.jdbcsqlexception: heksadecymalny string znieparzystąliczbąZnaków:" 2001-01-01 00:00:00.0"具有奇数字符的十六进制字符串: " 2001-01-01 00:00:00.0";SQL语句:插入预订(ID, recervation_name,date_from,date_to(value(1,'res1', ParseDateTime('01 01 2001','D M Yyyy'(,ParseDateTime('02 01 2001',, ((,
但是,当使用5.2.12.Final
时,一切都在工作。
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
模块。
Hibernate 5添加的功能之一是Java 8类(如日期和时间API(的支持,因此您可以将.jar
添加到pom.xml
:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>5.1.0.Final</version>
</dependency>
我遇到了相同的问题,并使用 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>