Básicamente, estoy buscando una anotación de tipo "@Ignore" con la que pueda detener la persistencia de un campo en particular. ¿Cómo se puede lograr esto?JPA forma más rápida de ignorar un campo durante la persistencia?
Respuesta
@Transient
cumple con sus necesidades.
Para ignorar un campo, anótelo con @Transient
por lo que no se asignará por hibernación.
Fuente: Hibernate Annotations.
Esta respuesta llega un poco tarde, pero completa la respuesta.
el fin de evitar un campo de una entidad que se persistieron en DB se puede utilizar uno de los dos mecanismos:
@Transient - la anotación JPA marcando un campo como no con persistencia
transient palabra clave en java Tenga cuidado: el uso de esta palabra clave evitará que el campo se use con cualquier mecanismo de serialización de Java. Por lo tanto, si el campo debe ser serializado, será mejor que utilice solo la anotación @ Transient.
¿Qué tal si solo quiero ignorar la persistencia en el método get ?. Por ejemplo: myjparepository.save() guardará el modelo como de costumbre, y myjparepository.find (id) ignorará el campo que yo quiero? – xtiger
ni idea si eso es posible. Lo siento –
Para completar las respuestas anteriores, que tenía el caso mediante un archivo de asignación XML donde ni el @Transient
ni transient
trabajaron ... que tenía que poner la información transitoria en el archivo xml:
<attributes>
(...)
<transient name="field" />
</attributes>
Para ignore un campo, anótelo con @Transient
para que hibernate no lo correlacione.
pero luego jackson no serializará el campo al convertir a JSON.
Si necesita mezclar JPA con JSON (omita por la APP pero todavía incluir en Jackson) utiliza @JsonInclude
:
@JsonInclude()
@Transient
private String token;
También puede utilizar JsonInclude.Include.NON_NULL y ocultar campos en JSON durante la deserialización cuando token == null
:
@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private String token;
Estoy ejecutando JAX-RS 2.0.1/Jersey 2.25.1/Jackson 2.8.7 y con esa pila '@ JsonInclude' no es necesario:' @ Transient' campos todavía se incluyen en JSON. (Todavía tienes mi voto: la técnica en sí misma podría ser muy útil en otras circunstancias). – DKroot
Ninguna de las respuestas anteriores funcionó para mí usando 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
a menos que explícitamente le diga que no lo haga. La clave fue la de añadir el módulo hibernate5 (que yo estaba usando para hacer frente a otras anotaciones de Hibernate) y desactivar la función de USE_TRANSIENT_ANNOTATION
en mi Aplicación Jersey:
ObjectMapper jacksonObjectMapper = new ObjectMapper();
Hibernate5Module jacksonHibernateModule = new Hibernate5Module();
jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
jacksonObjectMapper.registerModule(jacksonHibernateModule);
Aquí es la dependencia para el Hibernate5Module:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.9</version>
</dependency>
Después de probar todos los demás métodos mencionó anteriormente y otras '@ JsonProperty' ' '@ JsonInclude' @JsonSerialize + @ JsonDeserialize'' mapper.configure (MapperFeature.PROPAGATE_TRANSIENT_MARKER, false)); ' esta solución finalmente funcionó. ¡Gracias! – Aceonline
- 1. Mongo - Ignorar la propiedad de la persistencia
- 2. La forma más rápida de incrementar un campo en la base de datos
- 3. La forma más rápida de actualizar 120 millones de registros
- 4. La forma más rápida de completar ArrayList
- 5. La forma más rápida de aprender Maven
- 6. La forma más rápida de depurar complementos de Firefox durante el desarrollo
- 7. Forma más rápida de clonar un calendario Gregorian?
- 8. La forma más rápida de verificar si existe un objeto
- 9. ¿La forma más rápida de escribir en un archivo?
- 10. Inverse String.Replace - ¿Forma más rápida de hacerlo?
- 11. Nombre de la unidad de persistencia dinámica JPA
- 12. GWT con JPA - ningún proveedor de persistencia
- 13. forma más rápida de generar bits aleatorios
- 14. Forma más rápida/más limpia de cargar un archivo de texto en la memoria
- 15. La forma más rápida de iterar array en PHP
- 16. La forma más rápida de eliminar caracteres de la cadena
- 17. ¿Forma más rápida de comunicarse usando TcpClient?
- 18. ¿Forma más rápida de obtener múltiples FileInfo?
- 19. reforma de datos (una forma más rápida)
- 20. ¿Forma más rápida de revisar rectángulos intersecados?
- 21. Forma más rápida de leer el archivo
- 22. JPA o Hibernate para Java ¿Persistencia?
- 23. Separar una entidad de un contexto de persistencia JPA (JPA 2.0/Hibernate/EJB 3/J2EE 6)
- 24. ¿La forma más rápida de ver la pantalla? Cualquier idioma
- 25. La forma más rápida de probar la conexión a Internet
- 26. La forma más rápida de reposicionar la sublista en python
- 27. La forma más rápida de realizar la actualización masiva
- 28. Implementación de Grails: ¿la forma más rápida de implementarse?
- 29. La forma más rápida de hacer una resta de colección
- 30. Forma más rápida para enumerar el alfabeto
Pero entonces, Jackson no serializará el campo al convertir a JSON ... ¿cómo resolverlo? – MobileMon
que depende del diseño de tu aplicación.si anota su clase de entidad, se aplica a todas partes; pero si anotas esa entidad de uso, es otra historia. en resumen: use DAO cuando tenga múltiples almacenamientos – Sarief
@MobileMon verifique mi respuesta a continuación sobre jackson – user3871754