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?