ejemplos - persistencia dao java
¿La forma más rápida de JPA para ignorar un campo durante la persistencia? (6)
Esta respuesta llega un poco tarde, pero completa la respuesta.
Para evitar que un campo de una entidad persista en la base de datos, se puede utilizar uno de los dos mecanismos:
@Transient - la anotación JPA que marca un campo como no persistible
palabra clave transient en java. Cuidado: si utiliza esta palabra clave, evitará que el campo se use con cualquier mecanismo de serialización desde Java. Por lo tanto, si el campo debe ser serializado, es mejor que use solo la anotación @Transient .
Básicamente, estoy buscando una anotación de tipo "@Ignore" con la que pueda evitar que un campo en particular persista. ¿Cómo se puede lograr esto?
Ninguna de las respuestas anteriores funcionó para mí con Hibernate 5.2.10, Jersey 2.25.1 y Jackson 2.8.9. Finalmente encontré la respuesta (más o menos, hacen referencia a hibernate4module pero también funciona para 5) here . Ninguna de las anotaciones de Json funcionó en absoluto con @Transient
. Aparentemente, Jackson2 es lo suficientemente "inteligente" como para ignorar amablemente las cosas marcadas con @Transient
menos que explícitamente le digas que no lo haga. La clave fue agregar el módulo hibernate5 (que estaba usando para tratar otras anotaciones de Hibernate) y deshabilitar la función USE_TRANSIENT_ANNOTATION
en mi aplicación de Jersey:
ObjectMapper jacksonObjectMapper = new ObjectMapper();
Hibernate5Module jacksonHibernateModule = new Hibernate5Module();
jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
jacksonObjectMapper.registerModule(jacksonHibernateModule);
Aquí está la dependencia para el módulo Hibernate5:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.9</version>
</dependency>
Para completar las respuestas anteriores, tuve el caso utilizando un archivo de mapeo XML donde ni el @Transient
ni el @Transient
funcionaron ... Tuve que poner la información transitoria en el archivo XML:
<attributes>
(...)
<transient name="field" />
</attributes>
Para ignorar un campo, @Transient
con @Transient
para que no se @Transient
por hibernación.
pero luego jackson no serializará el campo al convertir a JSON.
Si necesita mezclar JPA con JSON (omitir por JPA pero aún incluir en Jackson) use @JsonInclude
:
@JsonInclude()
@Transient
private String token;
PROPINA:
También puede usar JsonInclude.Include.NON_NULL y ocultar los campos en JSON durante la deserialización cuando el token == null
:
@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private String token;
Para ignorar un campo, @Transient
con @Transient
para que no se @Transient
por hibernación.
Fuente: Hibernate Annotations .
@Transient
cumple con tus necesidades.