Quel est le but de AccessType.FIELD, AccessType.PROPERTY et @Access

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:

  • id,
  • numéro de téléphone,
  • getphnnumber.

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 .