not java jpa-2.0 transient

not - transient java jpa



¿Cuál es el propósito de AccessType.FIELD, AccessType.PROPERTY y @Access? (1)

Por defecto, el tipo de acceso está definido por el lugar donde coloca su anotación de identificador ( @Id ). Si lo coloca en el campo, será AccessType.FIELD , si lo coloca en el getter, será AccessType.PROPERTY .

A veces es posible que desee anotar no los campos sino las propiedades (por ejemplo, porque quiere tener alguna lógica arbitraria en el getter o porque lo prefiere de esa manera). En tal situación, debe definir un getter y anotarlo como AccessType.PROPERTY .

Por lo que recuerdo, si especifica AccessType.FIELD o AccessType.PROPERTY en cualquiera de los campos / métodos de la entidad, debe especificar el comportamiento predeterminado para toda la clase. Y es por eso que necesita tener AccessType.FIELD en el nivel de clase (a pesar de que AccessType.FIELD es el valor predeterminado).

Ahora, si no tuviera @Transient en el campo phnnumber , el JPA le proporcionaría una tabla de 3 columnas:

  • carné de identidad,
  • phnnumber,
  • getphnnumber.

Esto se debe a que usaría AccessType.FIELD para todos los campos de la entidad ( id y phnnumber ) y, al mismo tiempo, usaría AccessType.PROPERTY para su getter ( getPhnnumber() ).
Terminará con un número de teléfono mapeado dos veces en la base de datos.

Por lo tanto, se requiere la anotación @Transient , significa que la entidad no almacenará el valor del campo en el almacenamiento subyacente, sino el valor devuelto por su getter .

Solo quiero saber cuál es la diferencia entre todas estas anotaciones. ¿Por qué los usamos? Significa que no tienen ningún efecto, especialmente el nivel de campo y el nivel de propiedad.

¿Y cuál es el propósito de usar una anotación de nivel mixto como:

@Entity @Access(AccessType.FIELD) class Employee { // why their is a field level access private int id; // whats the purpose of transient here @Transient private String phnnumber; // why its a property level access @Access(AccessType.property) public String getPhnnumber() { return "1234556"; } }

¿Qué dice exactamente esta clase?