Upgrade optional Jackson/JPA integration to Hibernate 6.

Fixes #2234.
This commit is contained in:
Oliver Drotbohm
2023-05-03 23:01:57 +02:00
parent 816ca84e70
commit 9020e1d10d
4 changed files with 11 additions and 24 deletions

View File

@@ -58,7 +58,7 @@
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5-jakarta</artifactId>
<artifactId>jackson-datatype-hibernate6</artifactId>
</dependency>
</dependencies>

View File

@@ -75,7 +75,7 @@ class Jackson2DatatypeHelperIntegrationTests {
}
@Test // DATAREST-500
void configuresHibernate4ModuleToLoadLazyLoadingProxies() throws Exception {
void configuresHibernateModuleToLoadLazyLoadingProxies() throws Exception {
PersistentEntity<?, ?> entity = entities.getRequiredPersistentEntity(Order.class);
PersistentProperty<?> property = entity.getRequiredPersistentProperty("creator");

View File

@@ -72,7 +72,7 @@
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5-jakarta</artifactId>
<artifactId>jackson-datatype-hibernate6</artifactId>
<optional>true</optional>
</dependency>

View File

@@ -15,11 +15,10 @@
*/
package org.springframework.data.rest.webmvc.json;
import org.hibernate.Version;
import org.springframework.util.ClassUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate5.jakarta.Hibernate5JakartaModule;
import com.fasterxml.jackson.datatype.hibernate6.Hibernate6Module;
/**
* Helper class to register datatype modules based on their presence in the classpath.
@@ -32,35 +31,23 @@ public class Jackson2DatatypeHelper {
private static final boolean IS_HIBERNATE_AVAILABLE = ClassUtils.isPresent("org.hibernate.Version",
Jackson2DatatypeHelper.class.getClassLoader());
private static final boolean IS_HIBERNATE5_MODULE_AVAILABLE = ClassUtils.isPresent(
"com.fasterxml.jackson.datatype.hibernate5.jakarta.Hibernate5JakartaModule",
private static final boolean IS_HIBERNATE6_MODULE_AVAILABLE = ClassUtils.isPresent(
"com.fasterxml.jackson.datatype.hibernate6.Hibernate6Module",
Jackson2DatatypeHelper.class.getClassLoader());
public static void configureObjectMapper(ObjectMapper mapper) {
if (IS_HIBERNATE_AVAILABLE && (HibernateVersions.isHibernate5() || HibernateVersions.isHibernate6())
&& IS_HIBERNATE5_MODULE_AVAILABLE) {
new Hibernate5ModuleRegistrar().registerModule(mapper);
if (IS_HIBERNATE_AVAILABLE && IS_HIBERNATE6_MODULE_AVAILABLE) {
new Hibernate6ModuleRegistrar().registerModule(mapper);
}
}
private static class HibernateVersions {
public static boolean isHibernate5() {
return Version.getVersionString().startsWith("5");
}
public static boolean isHibernate6() {
return Version.getVersionString().startsWith("6");
}
}
private static class Hibernate5ModuleRegistrar {
private static class Hibernate6ModuleRegistrar {
public void registerModule(ObjectMapper mapper) {
Hibernate5JakartaModule module = new Hibernate5JakartaModule();
module.enable(Hibernate5JakartaModule.Feature.FORCE_LAZY_LOADING);
var module = new Hibernate6Module();
module.enable(Hibernate6Module.Feature.FORCE_LAZY_LOADING);
mapper.registerModule(module);
}