diff --git a/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/Hibernate4Module.java b/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/Hibernate4Module.java
index 396a319c..7225c007 100644
--- a/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/Hibernate4Module.java
+++ b/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/Hibernate4Module.java
@@ -28,21 +28,21 @@ public enum Feature {
* Default value is true.
*/
USE_TRANSIENT_ANNOTATION(true),
-
+
/**
* If FORCE_LAZY_LOADING is false, this feature serializes uninitialized lazy loading proxies as
- * {"identifierName":"identifierValue"} rather than null.
+ * {"identifierName":"identifierValue"} rather than null.
*
* Default value is false.
*
- * Note that the name of the identifier property can only be determined if
+ * Note that the name of the identifier property can only be determined if
*
*
the {@link Mapping} is provided to the Hibernate4Module, or
- *
the persistence context that loaded the proxy has not yet been closed, or
+ *
the persistence context that loaded the proxy has not yet been closed, or
*
the id property is mapped with property access (for instance because the {@code @Id}
* annotation is applied to a method rather than a field)
*
- * Otherwise, the entity name will be used instead.
+ * Otherwise, the entity name will be used instead.
*/
SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS(false),
@@ -58,7 +58,7 @@ public enum Feature {
*
* Default value is false, meaning that laziness is considered to be the
* default value.
- *
+ *
* @since 2.4
*/
REQUIRE_EXPLICIT_LAZY_LOADING_MARKER(false),
@@ -78,7 +78,7 @@ public enum Feature {
* @since 2.8.2
*/
REPLACE_PERSISTENT_COLLECTIONS(false),
-
+
/**
* Using {@link #FORCE_LAZY_LOADING} may result in
* `javax.persistence.EntityNotFoundException`. This flag configures Jackson to
@@ -86,8 +86,16 @@ public enum Feature {
*
* @since 2.10
*/
- WRITE_MISSING_ENTITIES_AS_NULL(false)
- ;
+ WRITE_MISSING_ENTITIES_AS_NULL(false),
+
+ /**
+ * Feature that may be disables to unwrap the identifier
+ * of the serialized entity, returning a value instead of
+ * an object.
+ *
+ * @since 2.12
+ */
+ WRAP_IDENTIFIER_IN_OBJECT(true);
final boolean _defaultState;
final int _mask;
@@ -106,7 +114,7 @@ public static int collectDefaults()
}
return flags;
}
-
+
private Feature(boolean defaultState) {
_defaultState = defaultState;
_mask = (1 << ordinal());
@@ -118,7 +126,7 @@ private Feature(boolean defaultState) {
}
protected final static int DEFAULT_FEATURES = Feature.collectDefaults();
-
+
/**
* Bit flag composed of bits that indicate which
* {@link Feature}s
diff --git a/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/HibernateProxySerializer.java b/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/HibernateProxySerializer.java
index f570a8bf..3d46ee06 100644
--- a/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/HibernateProxySerializer.java
+++ b/hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/HibernateProxySerializer.java
@@ -46,6 +46,7 @@ public class HibernateProxySerializer
protected final boolean _forceLazyLoading;
protected final boolean _serializeIdentifier;
protected final boolean _nullMissingEntities;
+ protected final boolean _wrappedIdentifier;
protected final Mapping _mapping;
/**
@@ -62,26 +63,31 @@ public class HibernateProxySerializer
public HibernateProxySerializer(boolean forceLazyLoading)
{
- this(forceLazyLoading, false, false, null, null);
+ this(forceLazyLoading, false, false, true, null, null);
}
public HibernateProxySerializer(boolean forceLazyLoading, boolean serializeIdentifier) {
- this(forceLazyLoading, serializeIdentifier, false, null, null);
+ this(forceLazyLoading, serializeIdentifier, false, true, null, null);
}
public HibernateProxySerializer(boolean forceLazyLoading, boolean serializeIdentifier, Mapping mapping) {
- this(forceLazyLoading, serializeIdentifier, false, mapping, null);
+ this(forceLazyLoading, serializeIdentifier, false, true, mapping, null);
}
public HibernateProxySerializer(boolean forceLazyLoading, boolean serializeIdentifier, boolean nullMissingEntities, Mapping mapping) {
- this(forceLazyLoading, serializeIdentifier, nullMissingEntities, mapping, null);
+ this(forceLazyLoading, serializeIdentifier, nullMissingEntities, true, mapping, null);
}
- public HibernateProxySerializer(boolean forceLazyLoading, boolean serializeIdentifier, boolean nullMissingEntities, Mapping mapping,
- BeanProperty property) {
+ public HibernateProxySerializer(boolean forceLazyLoading, boolean serializeIdentifier, boolean nullMissingEntities, boolean wrappedIdentifier, Mapping mapping) {
+ this(forceLazyLoading, serializeIdentifier, nullMissingEntities, wrappedIdentifier, mapping, null);
+ }
+
+ public HibernateProxySerializer(boolean forceLazyLoading, boolean serializeIdentifier, boolean nullMissingEntities, boolean wrappedIdentifier, Mapping mapping,
+ BeanProperty property) {
_forceLazyLoading = forceLazyLoading;
_serializeIdentifier = serializeIdentifier;
_nullMissingEntities = nullMissingEntities;
+ _wrappedIdentifier = wrappedIdentifier;
_mapping = mapping;
_dynamicSerializers = PropertySerializerMap.emptyForProperties();
_property = property;
@@ -90,8 +96,8 @@ public HibernateProxySerializer(boolean forceLazyLoading, boolean serializeIdent
@Override
public JsonSerializer> createContextual(SerializerProvider prov, BeanProperty property) {
return new HibernateProxySerializer(this._forceLazyLoading, _serializeIdentifier, _nullMissingEntities,
- _mapping, property);
- }
+ _wrappedIdentifier, _mapping, property);
+ }
/*
/**********************************************************************
@@ -103,7 +109,7 @@ public JsonSerializer> createContextual(SerializerProvider prov, BeanProperty
public boolean isEmpty(SerializerProvider provider, HibernateProxy value) {
return (value == null) || (findProxied(value) == null);
}
-
+
@Override
public void serialize(HibernateProxy value, JsonGenerator jgen, SerializerProvider provider)
throws IOException
@@ -181,29 +187,21 @@ protected JsonSerializer