当前位置: 首页 > 知识库问答 >
问题:

在SPRING-BOOT中使用更新的Hibernate或JPA 2.2Java8日期/时间?

尹善
2023-03-14

不支持使用spring-boot1.5.10(所以当前)使用Java8 Date/Time,因为默认情况下这个版本的Spring Boot使用Hibernate 5.0.12。最终的。要实现这一点(Spring Boot 1.5.10),请在pom.xml属性部分覆盖该版本。

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

问:启用Java8日期/时间覆盖hibernate版本或以某种方式覆盖hibernate版本的最佳方法是什么(如果是,那么如何实现?)是否将JPA 2.2用于SPRING\u引导?

编辑与Hibernate5.0. x我不断得到:

原因:组织。springframework。jdbc。数据源。初始化。ScriptStatementFailedException:未能执行URL[文件:./src/main/resources/db/h2/data-h2.SQL]的SQL脚本语句#1:插入保留(ID、RESERVATION\u NAME、DATE\u FROM、DATE\u to)值(1,“res1”,ParseDateTime('01 01 2001','d M yyyyy'),ParseDateTime('02 01 2001','d M yyyyy'),(2,“res1”,ParseDateTime('01 02 2001','d M yyyyyy'),(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 YYYYYY”)、ParseDateTime(“02 05 2001”、“d M YYYYYY”))));嵌套异常为org。h2.jdbc。JdbcSQLException:Heksadecymalny字符串z nieparzystąliczbąznaków:“2001-01-01 00:00:00.0”十六进制字符串,奇数字符:“2001-01-01 00:00:00.0”;SQL语句:在保留(ID、RESERVATION\u NAME、DATE\u FROM、DATE\u TO)中插入值(1,“res1”、ParseDateTime('01 01 2001”,“d M yyyy”)、ParseDateTime('02 01 2001”,“d M yyyy”),

但当使用<代码>5.2.12时。最终,一切正常。

共有3个答案

堵德曜
2023-03-14

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

最终起到了帮助作用的是,添加了对hibernate-java8的依赖,使用了5.1。X版本。正如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>
韩彬
2023-03-14

Hibernate 5添加的特性之一是支持Java 8类,如日期和时间API,因此您可以添加。jar到您的pom。xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.1.0.Final</version>
</dependency>
平光明
2023-03-14

Hibernate5。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中,现在本地支持Java8个日期/时间类型。

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

 类似资料:
  • 我需要在我的MySQL数据库中进行批量插入(近10000个)。我正在使用JPA/Hibernate和spring Boot。我从hibernate文档中读到了在hibernate中执行大容量插入/更新,我认为我的代码不能正常工作,因为它顺序地插入hibernate查询,而不是在批处理插入中执行它们。下面是我的代码。我是不是漏掉了什么? 这是我的数据源配置。 我是不是漏掉了什么? 请帮帮忙。

  • 问题内容: 经过大量的google’ing和PHP手动阅读之后,我真的很想在日期时间加上X分钟,但似乎一无所获。 我的日期时间格式是: : 要添加的分钟数只是0到59之间的数字 我希望输出与添加分钟的输入格式相同。 有人可以给我一个有效的代码示例,因为我的尝试似乎并没有带我去任何地方? 问题答案: 在ISO 8601标准的持续时间 是在形式的串,其中所述部件用指示的持续时间有多长一个数字值代替。

  • 是否可以在程序运行时更新数据库架构?我使用过ddl自动更新,但它有时不会添加或删除列,所以我必须编辑为,然后返回进行架构更新。为什么它不一致地更新架构,我宁愿在接近生产之前不使用迁移工具。因此,理想情况下,当我向实体添加字段或删除它时,它应该在下次运行程序时尝试更新方案。

  • 我需要访问现有的MySQL数据库,该数据库使用列存储时间戳: 现在我更喜欢使用或实例而不是整数,所以我试图让Hibernate直接转换值。不幸的是,Hibernate不会识别这样注释的列: 或者像这样: 这确实会在将来返回类似。如何使Hibernate convert列正确转换,从而不必在getter和setter中转换它们?

  • 问题内容: 我们有一个Oracle日期列。首先,我们在Java / Hibernate类中使用。这可行,但是保存时似乎没有在数据库中存储任何时间信息,因此我将Java数据类型更改为Timestamp。现在我们得到这个错误: springframework.beans.factory.BeanCreationException:在类路径资源[margin-service- domain -confi

  • 我的程序使用日期来检查工程师何时访问过机器。唯一的问题是日期并不是最新的。机器显示的日期和时间是机器启动的准确时间。当按钮被点击时就不会了。任何帮助都会有帮助。 代码: