proveedores persistencia ejemplos con archivo java database hibernate jpa

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 .