Skip to content

Commit 073a604

Browse files
committed
Correct Hibernate 7.x dependency version details
Updated Hibernate 7.x dependency version information in README. jackson 3 support wip wip wip wip wip wip wip workaround compilation issues Update Hibernate7ProxySerializer.java fix a broken test fix InclusionTest hibernate6 hibernate5 jakarta module hibernate4 3.1 Fix one one of 3 hib3 test failures
1 parent a81d426 commit 073a604

File tree

178 files changed

+1301
-1426
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

178 files changed

+1301
-1426
lines changed

README.md

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
Project to build [Jackson](../../../jackson) module to
22
support JSON serialization and deserialization of Hibernate (https://hibernate.org) specific data types and properties; and features like lazy-loading.
33

4-
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.fasterxml.jackson.datatype/jackson-datatype-hibernate5/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.fasterxml.jackson.datatype/jackson-datatype-hibernate5/)
5-
[![Javadoc](https://javadoc.io/badge/com.fasterxml.jackson.datatype/jackson-datatype-hibernate5.svg)](https://www.javadoc.io/doc/com.fasterxml.jackson.datatype/jackson-datatype-hibernate5)
4+
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/tools.jackson.datatype/jackson-datatype-hibernate5/badge.svg)](https://maven-badges.herokuapp.com/maven-central/tools.jackson.datatype/jackson-datatype-hibernate5/)
5+
[![Javadoc](https://javadoc.io/badge/tools.jackson.datatype/jackson-datatype-hibernate5.svg)](https://www.javadoc.io/doc/tools.jackson.datatype/jackson-datatype-hibernate5)
66

77
## Status
88

@@ -11,32 +11,17 @@ Module is usable and supported for Jackson 2.x. and used by non-trivial number o
1111
Currently (October 2025) module is **NOT supported for Jackson 3.x** due to lack of active maintainer.
1212
It is considered Deprecated as part of [JSTEP-9](https://github.com/FasterXML/jackson-future-ideas/wiki/JSTEP-9).
1313

14-
Note: Hibernate 4.x, 5.x, 6.x and 7.x are supported (5.x starting with Jackson 2.6; 6.x with Jackson 2.15 and 7.x with Jackson 2.20) but they require different jars, and Maven artifact names (and jar names differ).
14+
Note: Hibernate 4.x, 5.x, 6.x and 7.x are supported but they require different jars, and Maven artifact names (and jar names differ).
1515

1616
This document refers to "Hibernate 5" version, but changes with 4.x/6.x/7.x should require
1717
little more than replacing "5" in names with "4", "6" or "7".
1818

19-
Hibernate 3.x was supported up to Jackson 2.12 but is no longer supported at and after 2.13
20-
21-
Jackson 2.13 adds Support for "Hibernate 5 Jakarta" variant (for Hibernate 5.5 and beyond);
19+
See also "Hibernate 5 Jakarta" variant (for Hibernate 5.5 and beyond);
2220
see below for more information.
2321

24-
Jackson 2.15 adds Support for Hibernate 6.x; see below for more information.
25-
26-
Jackson 2.20 adds Support for Hibernate 7.x; see below for more information.
27-
2822
### JDK requirements
2923

30-
Before Jackson 2.15, baseline JDK needed for building for JDK 8 and all
31-
module variants worked on Java 8.
32-
33-
With Jackson 2.15, JDK 11 will be required to build: all modules run on
34-
Java 8 except for Hibernate 6.x module which requires Java 11 like
35-
Hibernate 6.x itself.
36-
37-
With Jackson 2.20, JDK 17 will be required to build: 4.x and 5.x modules run on
38-
Java 8, 6.x on 11 and Hibernate 7.x module requires Java 17 like
39-
Hibernate 7.x itself.
24+
Java 17 or above is required.
4025

4126
### Javax vs Jakarta
4227

@@ -59,9 +44,9 @@ To use module on Maven-based projects, use following dependency
5944

6045
```xml
6146
<dependency>
62-
<groupId>com.fasterxml.jackson.datatype</groupId>
47+
<groupId>tools.jackson.datatype</groupId>
6348
<artifactId>jackson-datatype-hibernate5</artifactId>
64-
<version>2.20.0</version>
49+
<version>3.0.0</version>
6550
</dependency>
6651
```
6752

@@ -71,9 +56,9 @@ Note that you need to use "jackson-datatype-hibernate4" for Hibernate 4.x.
7156

7257
```xml
7358
<dependency>
74-
<groupId>com.fasterxml.jackson.datatype</groupId>
59+
<groupId>tools.jackson.datatype</groupId>
7560
<artifactId>jackson-datatype-hibernate4</artifactId>
76-
<version>2.20.0</version>
61+
<version>3.0.0</version>
7762
</dependency>
7863
```
7964

@@ -82,9 +67,9 @@ you will need the jakarta suffixed dependency for Hibernate 5.5:
8267

8368
```xml
8469
<dependency>
85-
<groupId>com.fasterxml.jackson.datatype</groupId>
70+
<groupId>tools.jackson.datatype</groupId>
8671
<artifactId>jackson-datatype-hibernate5-jakarta</artifactId>
87-
<version>2.20.0</version>
72+
<version>3.0.0</version>
8873
</dependency>
8974
```
9075

@@ -93,20 +78,19 @@ but you will need to use "jackson-datatype-hibernate6" for Hibernate 6.x:
9378

9479
```xml
9580
<dependency>
96-
<groupId>com.fasterxml.jackson.datatype</groupId>
81+
<groupId>tools.jackson.datatype</groupId>
9782
<artifactId>jackson-datatype-hibernate6</artifactId>
98-
<version>2.20.0</version>
83+
<version>3.0.0</version>
9984
</dependency>
10085
```
10186

102-
and finally, for Hibernate 7.x (not yet released)
87+
and finally, for Hibernate 7.x
10388

10489
```xml
10590
<dependency>
106-
<groupId>com.fasterxml.jackson.datatype</groupId>
91+
<groupId>tools.jackson.datatype</groupId>
10792
<artifactId>jackson-datatype-hibernate7</artifactId>
108-
<!-- will be added in Jackson 2.20.0: -->
109-
<version>2.20.0-SNAPSHOT</version>
93+
<version>3.0.0</version>
11094
</dependency>
11195
```
11296

hibernate4/pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
<!-- do_not_remove: published-with-gradle-metadata -->
77
<modelVersion>4.0.0</modelVersion>
88
<parent>
9-
<groupId>com.fasterxml.jackson.datatype</groupId>
9+
<groupId>tools.jackson.datatype</groupId>
1010
<artifactId>jackson-datatype-hibernate-parent</artifactId>
11-
<version>2.21.0-SNAPSHOT</version>
11+
<version>3.1.0-SNAPSHOT</version>
1212
</parent>
1313
<artifactId>jackson-datatype-hibernate4</artifactId>
1414
<name>Jackson-datatype-Hibernate4</name>
@@ -21,7 +21,7 @@ Hibernate (https://hibernate.org) version 4.x data types.
2121
<javac.src.version>1.8</javac.src.version>
2222
<javac.target.version>1.8</javac.target.version>
2323
<!-- Generate PackageVersion.java into this directory. -->
24-
<packageVersion.dir>com/fasterxml/jackson/datatype/hibernate4</packageVersion.dir>
24+
<packageVersion.dir>tools/jackson/datatype/hibernate4</packageVersion.dir>
2525
<packageVersion.package>${project.groupId}.hibernate4</packageVersion.package>
2626
<!-- Hibernate with JPA 2.0 -->
2727
<hibernate.version>4.3.11.Final</hibernate.version>
@@ -67,8 +67,8 @@ Hibernate (https://hibernate.org) version 4.x data types.
6767
<groupId>org.apache.maven.plugins</groupId>
6868
<artifactId>maven-compiler-plugin</artifactId>
6969
<configuration>
70-
<source>8</source>
71-
<target>8</target>
70+
<source>17</source>
71+
<target>17</target>
7272
</configuration>
7373
</plugin>
7474
<plugin>

hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/HibernateSerializerModifier.java

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package com.fasterxml.jackson.datatype.hibernate4;
1+
package tools.jackson.datatype.hibernate4;
22

3-
import com.fasterxml.jackson.core.Version;
4-
import com.fasterxml.jackson.databind.AnnotationIntrospector;
3+
import tools.jackson.core.Version;
4+
import tools.jackson.databind.AnnotationIntrospector;
55
import org.hibernate.SessionFactory;
66
import org.hibernate.engine.spi.Mapping;
77

8-
public class Hibernate4Module extends com.fasterxml.jackson.databind.Module
8+
public class Hibernate4Module extends tools.jackson.databind.JacksonModule
99
{
1010
/**
1111
* Enumeration that defines all toggleable features this module
@@ -178,11 +178,11 @@ public void setupModule(SetupContext context)
178178
context.appendAnnotationIntrospector(ai);
179179
}
180180
context.addSerializers(new HibernateSerializers(_mapping, _moduleFeatures));
181-
context.addBeanSerializerModifier(new HibernateSerializerModifier(_moduleFeatures, _sessionFactory));
181+
context.addSerializerModifier(new HibernateSerializerModifier(_moduleFeatures, _sessionFactory));
182182
}
183183

184184
/**
185-
* Method called during {@link #setupModule}, to create {@link com.fasterxml.jackson.databind.AnnotationIntrospector}
185+
* Method called during {@link #setupModule}, to create {@link tools.jackson.databind.AnnotationIntrospector}
186186
* to register along with module. If null is returned, no introspector is added.
187187
*/
188188
protected AnnotationIntrospector annotationIntrospector() {
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
package com.fasterxml.jackson.datatype.hibernate4;
1+
package tools.jackson.datatype.hibernate4;
22

33
import javax.persistence.Transient;
44

55
import org.hibernate.bytecode.internal.javassist.FieldHandler;
66

7-
import com.fasterxml.jackson.core.Version;
8-
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
9-
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
10-
import com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector;
7+
import tools.jackson.core.Version;
8+
import tools.jackson.databind.cfg.MapperConfig;
9+
import tools.jackson.databind.introspect.AnnotatedClass;
10+
import tools.jackson.databind.introspect.AnnotatedMember;
11+
import tools.jackson.databind.introspect.NopAnnotationIntrospector;
1112

1213
/**
13-
* Simple {@link com.fasterxml.jackson.databind.AnnotationIntrospector} that adds support for using
14+
* Simple {@link tools.jackson.databind.AnnotationIntrospector} that adds support for using
1415
* {@link javax.persistence.Transient} to denote ignorable fields (alongside with Jackson
1516
* and/or JAXB annotations).
1617
*/
@@ -67,12 +68,12 @@ public Version version() {
6768
*/
6869

6970
@Override
70-
public boolean hasIgnoreMarker(AnnotatedMember m) {
71+
public boolean hasIgnoreMarker(MapperConfig<?> config, AnnotatedMember m) {
7172
return _cfgCheckTransient && m.hasAnnotation(Transient.class);
7273
}
7374

7475
@Override
75-
public Boolean isIgnorableType(AnnotatedClass ac)
76+
public Boolean isIgnorableType(MapperConfig<?> config, AnnotatedClass ac)
7677
{
7778
/* 26-Dec-2015, tatu: To fix [datatype-hibernate#72], need to suppress handling
7879
* of `FieldHandled`. Not sure if it works without test (alas, none provided),
Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
1-
package com.fasterxml.jackson.datatype.hibernate4;
1+
package tools.jackson.datatype.hibernate4;
22

33
import java.beans.Introspector;
4-
import java.io.IOException;
54
import java.lang.reflect.Field;
65
import java.lang.reflect.Method;
76
import java.util.HashMap;
87

98
import javax.persistence.EntityNotFoundException;
109

11-
import com.fasterxml.jackson.core.*;
12-
import com.fasterxml.jackson.databind.BeanProperty;
13-
import com.fasterxml.jackson.databind.JavaType;
14-
import com.fasterxml.jackson.databind.JsonMappingException;
15-
import com.fasterxml.jackson.databind.JsonSerializer;
16-
import com.fasterxml.jackson.databind.SerializerProvider;
17-
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
18-
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
19-
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
20-
import com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap;
21-
import com.fasterxml.jackson.databind.util.NameTransformer;
10+
import tools.jackson.core.*;
11+
import tools.jackson.databind.BeanProperty;
12+
import tools.jackson.databind.JavaType;
13+
import tools.jackson.databind.DatabindException;
14+
import tools.jackson.databind.ValueSerializer;
15+
import tools.jackson.databind.SerializationContext;
16+
import tools.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
17+
import tools.jackson.databind.jsontype.TypeSerializer;
18+
import tools.jackson.databind.ser.impl.PropertySerializerMap;
19+
import tools.jackson.databind.type.TypeFactory;
20+
import tools.jackson.databind.util.NameTransformer;
2221

2322
import org.hibernate.engine.spi.Mapping;
2423
import org.hibernate.engine.spi.SessionImplementor;
@@ -36,8 +35,7 @@
3635
* this one) have.
3736
*/
3837
public class HibernateProxySerializer
39-
extends JsonSerializer<HibernateProxy>
40-
implements ContextualSerializer
38+
extends ValueSerializer<HibernateProxy>
4139
{
4240
/**
4341
* Property that has proxy value to handle
@@ -144,12 +142,12 @@ protected HibernateProxySerializer(HibernateProxySerializer base,
144142
}
145143

146144
@Override
147-
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {
145+
public ValueSerializer<?> createContextual(SerializationContext prov, BeanProperty property) {
148146
return new HibernateProxySerializer(this, property, _unwrapper);
149147
}
150148

151149
@Override
152-
public JsonSerializer<HibernateProxy> unwrappingSerializer(final NameTransformer unwrapper)
150+
public ValueSerializer<HibernateProxy> unwrappingSerializer(final NameTransformer unwrapper)
153151
{
154152
return new HibernateProxySerializer(this, _property, unwrapper);
155153
}
@@ -161,36 +159,34 @@ public boolean isUnwrappingSerializer() {
161159

162160
/*
163161
/**********************************************************************
164-
/* JsonSerializer impl
162+
/* ValueSerializer impl
165163
/**********************************************************************
166164
*/
167165

168166
@Override
169-
public boolean isEmpty(SerializerProvider provider, HibernateProxy value) {
167+
public boolean isEmpty(SerializationContext provider, HibernateProxy value) {
170168
return (value == null) || (findProxied(value) == null);
171169
}
172170

173171
@Override
174-
public void serialize(HibernateProxy value, JsonGenerator jgen, SerializerProvider provider)
175-
throws IOException
172+
public void serialize(HibernateProxy value, JsonGenerator jgen, SerializationContext provider)
176173
{
177174
Object proxiedValue = findProxied(value);
178175
// TODO: figure out how to suppress nulls, if necessary? (too late for that here)
179176
if (proxiedValue == null) {
180-
provider.defaultSerializeNull(jgen);
177+
provider.defaultSerializeNullValue(jgen);
181178
return;
182179
}
183180
findSerializer(provider, proxiedValue).serialize(proxiedValue, jgen, provider);
184181
}
185182

186183
@Override
187-
public void serializeWithType(HibernateProxy value, JsonGenerator jgen, SerializerProvider provider,
184+
public void serializeWithType(HibernateProxy value, JsonGenerator jgen, SerializationContext provider,
188185
TypeSerializer typeSer)
189-
throws IOException
190186
{
191187
Object proxiedValue = findProxied(value);
192188
if (proxiedValue == null) {
193-
provider.defaultSerializeNull(jgen);
189+
provider.defaultSerializeNullValue(jgen);
194190
return;
195191
}
196192
/* This isn't exactly right, since type serializer really refers to proxy
@@ -203,9 +199,9 @@ public void serializeWithType(HibernateProxy value, JsonGenerator jgen, Serializ
203199

204200
@Override
205201
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
206-
throws JsonMappingException
202+
throws DatabindException
207203
{
208-
SerializerProvider prov = visitor.getProvider();
204+
SerializationContext prov = visitor.getContext();
209205
if ((prov == null) || (_property == null)) {
210206
super.acceptJsonFormatVisitor(visitor, typeHint);
211207
} else {
@@ -221,8 +217,7 @@ public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType t
221217
/**********************************************************************
222218
*/
223219

224-
protected JsonSerializer<Object> findSerializer(SerializerProvider provider, Object value)
225-
throws IOException
220+
protected ValueSerializer<Object> findSerializer(SerializationContext provider, Object value)
226221
{
227222
/* TODO: if Hibernate did use generics, or we wanted to allow use of Jackson
228223
* annotations to indicate type, should take that into account.
@@ -236,7 +231,11 @@ protected JsonSerializer<Object> findSerializer(SerializerProvider provider, Obj
236231
* really anyone's guess at this point; proxies can exist at any level?
237232
*/
238233
PropertySerializerMap.SerializerAndMapResult result =
239-
_dynamicSerializers.findAndAddPrimarySerializer(type, provider, _property);
234+
_dynamicSerializers.findAndAddPrimarySerializer(
235+
//TODO find better way to get JavaType
236+
TypeFactory.createDefaultInstance().unsafeSimpleType(type),
237+
provider,
238+
_property);
240239
if (_dynamicSerializers != result.map) {
241240
_dynamicSerializers = result.map;
242241
}

0 commit comments

Comments
 (0)