Je veux juste savoir quelle est la différence entre toutes ces annotations. Pourquoi les utilisons-nous? Cela signifie qu’ils n’ont aucun effet, en particulier au niveau du champ et au niveau de la propriété.
Et quel est le but d’utiliser une annotation de niveau mixte comme:
@Entity @Access(AccessType.FIELD) class Employee { // why their is a field level access private int id; // whats the purpose of transient here @Transient private Ssortingng phnnumber; // why its a property level access @Access(AccessType.property) public Ssortingng getPhnnumber() { return "1234556"; } }
que dit exactement cette classe?
Par défaut, le type d’access est défini par l’endroit où vous avez placé votre annotation d’identifiant ( @Id
). Si vous le mettez sur le terrain – ce sera AccessType.FIELD
, si vous le mettez sur le getter – ce sera AccessType.PROPERTY
.
Parfois, vous voudrez peut-être annoter non pas des champs mais des propriétés (par exemple parce que vous voulez avoir une logique arbitraire dans le getter ou parce que vous le préférez). Dans ce cas, vous devez définir un getter et l’annoter comme AccessType.PROPERTY
.
Si je me souviens bien, si vous spécifiez AccessType.FIELD
ou AccessType.PROPERTY
sur l’un des champs / méthodes d’entité, vous devez spécifier le comportement par défaut pour toute la classe. Et c’est pourquoi vous devez avoir AccessType.FIELD
au niveau de la classe (bien AccessType.FIELD
soit la valeur par défaut).
Maintenant, si vous n’aviez pas @Transient
sur le champ phnnumber
, le JPA vous fournirait un tableau à 3 colonnes:
C’est parce qu’il utiliserait AccessType.FIELD
pour tous les champs d’entité ( id
et phnnumber
) et, en même temps, il utiliserait AccessType.PROPERTY
pour votre getter ( getPhnnumber()
).
Vous finirez avec le numéro de téléphone mappé deux fois dans la firebase database.
@Transient
annotation @Transient
est donc requirejse – cela signifie que l’entité ne stockera pas la valeur du champ dans le stockage sous-jacent, mais la valeur renvoyée par votre getter .