Wat is het doel van AccessType.FIELD, AccessType.PROPERTY en @Access

Ik wil gewoon weten wat het verschil is tussen al deze annotaties. Waarom gebruiken we deze… betekent dat ze geen effect hebben, met name op veldniveau en eigenschapsniveau.

En wat is het doel van het gebruik van annotaties op gemengd niveau, zoals:

@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";
    }
}

wat zegt deze klas precies?


Antwoord 1, autoriteit 100%

Standaard wordt het toegangstype gedefinieerd door de plaats waar u uw identificatieannotatie plaatst (@Id). Als u het in het veld plaatst, is het AccessType.FIELD, als je het op de getter zet, is het AccessType.PROPERTY.

Soms wil je misschien geen velden maar eigenschappen annoteren (bijvoorbeeld omdat je willekeurige logica in de getter wilt hebben of omdat je daar de voorkeur aan geeft). In een dergelijke situatie moet je een getter definiëren en deze annoteren als AccessType.PROPERTY.

Voor zover ik me herinner, moet u, als u AccessType.FIELDof AccessType.PROPERTYopgeeft in een van de entiteitsvelden/-methoden, het standaardgedrag voor de de hele klas. En daarom moet u AccessType.FIELDop klasniveau hebben (ondanks dat AccessType.FIELDde standaardwaarde is.)

Als u nu geen @Transientin het veld phnnumberzou hebben, zou de JPA u een tabel met 3 kolommen geven:

  • id,
  • phn-nummer,
  • getphnnummer.

Dat komt omdat het AccessType.FIELDzou gebruiken voor alle entiteitsvelden (iden phnnumber) en tegelijkertijd het zou AccessType.PROPERTYgebruiken voor uw getter (getPhnnumber()).
Je eindigt met het telefoonnummer dat twee keer in de database is toegewezen.

Daarom is de annotatie @Transientvereist – dit betekent dat de entiteit niet de waarde van het veldin de onderliggende opslag opslaat, maar de waarde die wordt geretourneerd door uw getter.

Other episodes