由于JDK8 Oracle
宣布不再支持,我需要将当前JDK
升级为JDK10
。
经过研究,当前hibernate
也需要从hibernate 4
升级到hibernate 5
,以便在JDK 10.
但是,有一些与hibernate相关的库,我是否应该升级,如果是,哪个版本适合?以下是我当前pom.xml
的摘录:
<properties>
<hibernate.version>4.3.11.Final</hibernate.version>
<java-version>1.7</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
答案 0 :(得分:3)
仅仅谈到依赖关系,从Hibernate 4.3.x 到&gt; = 5.2.x 的升级非常简单。最新的&gt; = 5.2.x版本非常可靠,已经过社区测试很长一段时间了。最新版本&gt; = 5.3.x已于2018年5月发布。
您可以使用以下代码段在pom.xml
中完成迁移:
<properties>
<hibernate.version>5.2.17.Final</hibernate.version>
<hibernate.validator.version>6.0.10.Final</hibernate.validator.version>
<java-version>10</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>
只需将一个属性值替换为:
<hibernate.version>5.3.1.Final</hibernate.version>
所有其他相关的传递依赖关系都会自动通过上述工件引入。
注意
Hibernate 5.2.x中不再存在原始hibernate-entitymanager-...jar
代码段使用的pom.xml
。与JPA / EntityManager相关的所有内容现已合并到hibernate-core-...jar
。
从版本 6.0.10 开始,该库完全支持JDK10:
您现在可以使用JDK 10构建和使用Hibernate Validator。
参考:http://in.relation.to/2018/05/15/hibernate-validator-6010-final-out/
此外,请检查项目中的每个persistence.xml
文件,以便
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
并将标头定义为JPA 2.1 兼容:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
或
以JPA 2.2 符合
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
version="2.2">
理论上,所有重要的依赖关系都应该用上面的代码片段绘制到你的项目中。但是,在实践中,您(很可能)会在现有项目代码的 compile 或 runtime 中遇到一些重大更改。其中许多问题可以通过查看官方迁移指南来解决:
版本 4.3.x - &gt; 5.0.x的:
在你的案例中,https://github.com/hibernate/hibernate-orm/blob/5.0/migration-guide.adoc是一个很好的推荐阅读(因为你从版本4.3.x开始)
版本 5.0.x - &gt; 5.1.x :
http://staging.hibernate.org/orm/documentation/5.1/migration/ 可以跳过,除非您使用BLOB和Oracle的DBMS或使用Hibernate的架构导出工具
版本 5.1.x - &gt; 5.2.x :
https://github.com/hibernate/hibernate-orm/wiki/Migration-Guide---5.2 包含有关重要更改的大量信息,例如PK生成,LimitHandler和其他
版本 5.2.x - &gt; 5.3.x :
https://github.com/hibernate/hibernate-orm/wiki/Migration-Guide---5.3增加了完整的JPA 2.2支持,并且在JDK8 / 9/10环境中应该可以正常工作。
希望它有所帮助。