relaciones onetomany mappedby manytoone generatedvalue ejemplo java hibernate serialization jpa persistence

java - onetomany - ¿Hibernate/JPA toma en consideración el modificador transitorio(no la anotación)



mappedby jpa (3)

Quiero evitar la serialización (en JMS / AMF) pero aún persistir el campo con JPA / Hibernate.

¿El modificador transient mi amigo? ¿ @Transient anotación @Transient y el modificador transient relacionados o no son todos?

La especificación java precisa que un servicio de sistema no guardará un campo transitorio en un almacenamiento persistente. ¿Pero hiberna un servicio del sistema? (No lo creo) http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#78119

Y costuras java.io.Serialisable para indicar que un out.writeObject and in.readObject se llaman para la serialización http://download.oracle.com/javase/1.4.2/docs/api/java/io/Serializable.html

¿Alguna idea?

Tal vez debería escribir una prueba rápida, pero estaré más seguro con un poco de especificaciones.

Gracias !


Intente proporcionar la writeObject(ObjectOutputStream oos) que no realiza una llamada a oos.defaultWriteObject() pero escribe manualmente todas las propiedades necesarias.

Pero no estoy seguro de que esto pueda funcionar, googlee si es estrictamente necesario llamar primero a defaultWriteObject .


La parte de la especificación de JPA publicada por Pascal Thivent parece bastante confusa. En realidad, Hibernate respeta la transient cuando se usa el acceso de campo, pero lo ignora en el caso del acceso a la propiedad. Quizás es un comportamiento específico de Hibernate.

Por ejemplo, en este caso, la bar no está serializada, pero aún persiste en la base de datos:

@Entity @Access(AccessType.FIELD) // Default access type - field public class Foo { @Id @GeneratedValue private Long id; transient private String bar; ... @Access(AccessType.PROPERTY) // Override default access type for this property public String getBar() { return bar; } }

EDITAR: Dado que no está claro cómo este comportamiento se ajusta a la especificación JPA, tal vez la mejor opción sea usar diferentes nombres para el campo transient y la propiedad correspondiente.


¿El modificador transient mi amigo? ¿ @Transient anotación @Transient y el modificador transient relacionados o no son todos?

No están realmente relacionados, pero me temo que no serán su amigo de todos modos, las propiedades transient no son persistentes por Hibernate / JPA. La especificación JPA lo expresa así:

2.1.1 Campos y propiedades persistentes

El estado persistente de una entidad es accedido por el tiempo de ejecución del proveedor de persistencia a través de los accesos de propiedad de estilo JavaBeans o mediante variables de instancia. Un tipo de acceso único (campo o acceso a la propiedad) se aplica a una jerarquía de entidades. Cuando se utilizan anotaciones, la ubicación de las anotaciones de asignación en los campos persistentes o en las propiedades persistentes de la clase de entidad especifica el tipo de acceso como acceso basado en campo o en propiedad, respectivamente.

  • Si la entidad tiene acceso basado en el campo, el tiempo de ejecución del proveedor de persistencia accede directamente a las variables de instancia. Todas las variables de instancia no transient que no están anotadas con la anotación Transient son persistentes. Cuando se utiliza el acceso basado en el campo, las anotaciones de mapeo relacional / objeto para la clase de entidad anotan las variables de instancia.
  • Si la entidad tiene acceso basado en la propiedad, el tiempo de ejecución del proveedor de persistencia accede al estado persistente a través de los métodos de acceso a la propiedad. Todas las propiedades no anotadas con la anotación Transient son persistentes. Los métodos de acceso a la propiedad deben ser públicos o estar protegidos. Cuando se utiliza el acceso basado en propiedades, las anotaciones de mapeo relacional / objeto para la clase de entidad anotan los accesadores de propiedades getter.
  • Las anotaciones de asignación no se pueden aplicar a campos o propiedades transient o Transient .
  • El comportamiento no se especifica si las anotaciones de asignación se aplican tanto a los campos persistentes como a las propiedades o si el descriptor XML especifica el uso de diferentes tipos de acceso dentro de una jerarquía de clases.

...

Referencias

Preguntas relacionadas