Skip to content

Commit 4a28ed5

Browse files
authored
Add 3.x versions (#190)
1 parent a81d426 commit 4a28ed5

File tree

183 files changed

+1710
-1755
lines changed

Some content is hidden

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

183 files changed

+1710
-1755
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.0.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: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
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.*;
12+
import tools.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
13+
import tools.jackson.databind.jsontype.TypeSerializer;
14+
import tools.jackson.databind.ser.impl.PropertySerializerMap;
15+
import tools.jackson.databind.util.NameTransformer;
2216

2317
import org.hibernate.engine.spi.Mapping;
2418
import org.hibernate.engine.spi.SessionImplementor;
@@ -36,8 +30,7 @@
3630
* this one) have.
3731
*/
3832
public class HibernateProxySerializer
39-
extends JsonSerializer<HibernateProxy>
40-
implements ContextualSerializer
33+
extends ValueSerializer<HibernateProxy>
4134
{
4235
/**
4336
* Property that has proxy value to handle
@@ -144,12 +137,12 @@ protected HibernateProxySerializer(HibernateProxySerializer base,
144137
}
145138

146139
@Override
147-
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {
140+
public ValueSerializer<?> createContextual(SerializationContext prov, BeanProperty property) {
148141
return new HibernateProxySerializer(this, property, _unwrapper);
149142
}
150143

151144
@Override
152-
public JsonSerializer<HibernateProxy> unwrappingSerializer(final NameTransformer unwrapper)
145+
public ValueSerializer<HibernateProxy> unwrappingSerializer(final NameTransformer unwrapper)
153146
{
154147
return new HibernateProxySerializer(this, _property, unwrapper);
155148
}
@@ -161,36 +154,34 @@ public boolean isUnwrappingSerializer() {
161154

162155
/*
163156
/**********************************************************************
164-
/* JsonSerializer impl
157+
/* ValueSerializer impl
165158
/**********************************************************************
166159
*/
167160

168161
@Override
169-
public boolean isEmpty(SerializerProvider provider, HibernateProxy value) {
162+
public boolean isEmpty(SerializationContext provider, HibernateProxy value) {
170163
return (value == null) || (findProxied(value) == null);
171164
}
172165

173166
@Override
174-
public void serialize(HibernateProxy value, JsonGenerator jgen, SerializerProvider provider)
175-
throws IOException
167+
public void serialize(HibernateProxy value, JsonGenerator jgen, SerializationContext provider)
176168
{
177169
Object proxiedValue = findProxied(value);
178170
// TODO: figure out how to suppress nulls, if necessary? (too late for that here)
179171
if (proxiedValue == null) {
180-
provider.defaultSerializeNull(jgen);
172+
provider.defaultSerializeNullValue(jgen);
181173
return;
182174
}
183175
findSerializer(provider, proxiedValue).serialize(proxiedValue, jgen, provider);
184176
}
185177

186178
@Override
187-
public void serializeWithType(HibernateProxy value, JsonGenerator jgen, SerializerProvider provider,
179+
public void serializeWithType(HibernateProxy value, JsonGenerator jgen, SerializationContext provider,
188180
TypeSerializer typeSer)
189-
throws IOException
190181
{
191182
Object proxiedValue = findProxied(value);
192183
if (proxiedValue == null) {
193-
provider.defaultSerializeNull(jgen);
184+
provider.defaultSerializeNullValue(jgen);
194185
return;
195186
}
196187
/* This isn't exactly right, since type serializer really refers to proxy
@@ -203,9 +194,9 @@ public void serializeWithType(HibernateProxy value, JsonGenerator jgen, Serializ
203194

204195
@Override
205196
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
206-
throws JsonMappingException
197+
throws DatabindException
207198
{
208-
SerializerProvider prov = visitor.getProvider();
199+
SerializationContext prov = visitor.getContext();
209200
if ((prov == null) || (_property == null)) {
210201
super.acceptJsonFormatVisitor(visitor, typeHint);
211202
} else {
@@ -221,8 +212,7 @@ public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType t
221212
/**********************************************************************
222213
*/
223214

224-
protected JsonSerializer<Object> findSerializer(SerializerProvider provider, Object value)
225-
throws IOException
215+
protected ValueSerializer<Object> findSerializer(SerializationContext provider, Object value)
226216
{
227217
/* TODO: if Hibernate did use generics, or we wanted to allow use of Jackson
228218
* annotations to indicate type, should take that into account.
@@ -236,7 +226,10 @@ protected JsonSerializer<Object> findSerializer(SerializerProvider provider, Obj
236226
* really anyone's guess at this point; proxies can exist at any level?
237227
*/
238228
PropertySerializerMap.SerializerAndMapResult result =
239-
_dynamicSerializers.findAndAddPrimarySerializer(type, provider, _property);
229+
_dynamicSerializers.findAndAddPrimarySerializer(
230+
provider.constructType(type),
231+
provider,
232+
_property);
240233
if (_dynamicSerializers != result.map) {
241234
_dynamicSerializers = result.map;
242235
}

0 commit comments

Comments
 (0)