2012-04-08 13 views
39

Tengo dos entidades:Jackson - serialización de entidades con relaciones birectional (ciclos) evitando

Parent { 
    Child[] children; 
} 

and 

Child { 
    Parent parent; 
} 

Estoy consciente de @JsonBackReference y @JsonManagedReference. Son buenos, si estoy serializando instancias de Parent.

Pero también necesito transferir instancias de Child y quiero tener el campo parent poblado.

En otras palabras:

  1. en la serialización de Parent debería tener children pero su campo padre puede estar vacío (se pueden resolver mediante el uso de anotaciones de referencia JSON).
  2. en la serialización de Child debe tener parent con su children (pero children no tiene que tener parent poblada.

¿Hay una manera de solucionarla mediante las funciones estándar Jackson?

Es decir, omitir serialización de entidades que ya fueron serializadas en lugar de marcar campos elegibles o no elegibles para la serialización.

Respuesta

35

Jackson 2.0 admite referencias completas de objetos cíclicos. Consulte "Jackson 2.0 released "(sección 'Manejar cualquier gráfico de objetos, ¡incluso los cíclicos!') Para un ejemplo.

Básicamente, tendrá que utilizar la nueva @JsonIdentityInfo para los tipos que requieren un manejo Identificación del estilo/idref. En su caso, esto sería Parent y Child tipos (si uno amplía el otro, simplemente agréguelo al tipo super y eso está bien).

+0

liberación bastante fresco. Requiere un paquete en movimiento. OK, lo verificaré. –

+0

Sí, lo es, una gran actualización. Pero la función en sí también es grande. :-) – StaxMan

+1

Funciona como declarado. Gran actualización. –

17

muy práctico implementación de la interfaz se proporciona en 2 biblioteca de Jackson como

@Entity 
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") 
public class Parent { .... 

@Entity 
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") 
public class Child { .... 

en experta en

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.0.2</version> 
</dependency> 

@StaxMan proporciona un buen enlace para iniciar desde

+2

de apoyo adicionales lectura http: //wiki.fasterxml.com/JacksonFeatureObjectIdentity – Mab

+0

no ayuda con el mapeo de hibernación –

+0

Nota: http://wiki.fasterxml.com/ ahora es un enlace inactivo – Pleymor

Cuestiones relacionadas