Since JDK8 Oracle
announced that no longer support, I am required to upgrade the current JDK
to JDK10
.
After study, the current hibernate
is also required to upgrade from hibernate 4
to hibernate 5
, in order to run at JDK 10.
However, there are some hibernate related libraries, should I also upgrade, if yes, which version that is suitable? Here is an extract of my current 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>
Speaking merely about dependencies, the upgrade from Hibernate 4.3.x to >= 5.2.x is pretty straight forward. The latest >= 5.2.x version is pretty solid and has been tested by the community for quite some time now. The more recent versions >= 5.3.x have been released in November 2020.
You can achieve the migration in your pom.xml
with the following snippets:
<properties>
<hibernate.version>5.2.18.Final</hibernate.version>
<hibernate.validator.version>6.0.21.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>
Just replace one property value to read:
<hibernate.version>5.3.22.Final</hibernate.version>
All other relevant transitive dependencies are pulled in via the above artifacts automatically.
Note well
The hibernate-entitymanager-...jar
which was used by your original pom.xml
snippet no longer exists in Hibernate 5.2.x. Everything which is related to JPA/EntityManager is now incorporated in hibernate-core-...jar
.
Starting with the release of version 6.0.10, the library fully supports JDK10:
You can now build and use Hibernate Validator with JDK 10.
For reference see: http://in.relation.to/2018/05/15/hibernate-validator-6010-final-out/
Moreover, review every persistence.xml
file in the project so that
you set: <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
and define the header to be JPA 2.1 compliant:
<?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">
or 3. to be JPA 2.2 compliant as
<?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">
In theory, all important dependencies should be drawn into your project with the above snippets. However, in practice, you will (most likely) encounter some breaking changes at compile or runtime with your existing project code. Many of these can be resolved by checking the official migration guides here:
Version 4.3.x -> 5.0.x:
https://github.com/hibernate/hibernate-orm/blob/5.0/migration-guide.adoc is a MUCH recommend read in your case (since you start at version 4.3.x)
Version 5.0.x -> 5.1.x:
http://staging.hibernate.org/orm/documentation/5.1/migration/ can be skipped except you make use of BLOBs and Oracle's DBMS or use Hibernate's schema export tools
Version 5.1.x -> 5.2.x:
https://github.com/hibernate/hibernate-orm/wiki/Migration-Guide---5.2 contains a lot of information on important changes, such as PK generation, LimitHandler and others
Version 5.2.x -> 5.3.x:
https://github.com/hibernate/hibernate-orm/wiki/Migration-Guide---5.3 which adds full JPA 2.2 support and should work fine in JDK8/9/10 environments.
Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With