Ignorer felter med JPA @ Transient Annotation

1. Introduktion

Når vi fastholder Java-objekter i databaseposter ved hjælp af en Object-Relational Mapping (ORM) -ramme, vil vi ofte ignorere visse felter. Hvis rammen er i overensstemmelse med Java Persistence API (JPA), kan vi tilføje @Transient kommentar til disse felter.

I denne vejledning demonstrerer vi korrekt brug af @Transient kommentar. Vi vil også se på dets forhold til Java's indbyggede forbigående nøgleord.

2. @Transient Kommentar vs. forbigående Nøgleord

Der er generelt en vis forvirring over forholdet mellem @Transient kommentar og Java's indbyggede forbigående nøgleord. Det forbigående nøgleordet er primært beregnet til at ignorere felter under Java-objektserialisering, men det forhindrer også, at disse felter fortsætter, når du bruger en JPA-ramme.

Med andre ord, forbigående nøgleord har samme effekt som @Transient kommentar, når du gemmer i en database. Men den @Transient annotering påvirker ikke Java-objektserialisering.

3. JPA @Transient Eksempel

Lad os sige, at vi har en Bruger klasse, som er en JPA-enhed, der kortlægges til en Brugertabel i vores database. Når en bruger logger ind, henter vi deres post fra tabellen Brugere, og derefter indstiller vi nogle yderligere felter på Bruger enhed bagefter. Disse ekstra felter svarer ikke til nogen kolonner i tabellen Brugere, fordi vi ikke vil gemme disse værdier.

For eksempel indstiller vi et tidsstempel på Bruger enhed, der repræsenterer, når brugeren loggede ind på deres nuværende session:

@Entity @Table (name = "Brugere") offentlig klasse bruger {@Id privat heltal-id; privat streng e-mail; privat strengadgangskode; @Transient privat Dato loginTid; // getters og setters}

Når vi gemmer dette Bruger modsætter sig databasen ved hjælp af en JPA-udbyder som Hibernate, ignorerer udbyderen loginTime felt på grund af @Transient kommentar.

Hvis vi serierer dette Bruger indvende og videregive det til en anden tjeneste i vores system, den loginTime felt vil blive inkluderet i serialiseringen. Hvis vi ikke ville medtage dette felt, kunne vi erstatte @Transient kommentar med forbigående nøgleord i stedet:

@Entity @Table (name = "Brugere") offentlig klasse Brugerimplementer Serialiserbar {@Id privat heltal-id; privat streng e-mail; privat strengadgangskode; privat forbigående Dato loginTid; // getters og setters}

Nu, den loginTime felt ignoreres under database persistens og objektserialisering.

4. Konklusion

I denne artikel har vi undersøgt, hvordan man korrekt bruger JPA @Transient kommentar i en typisk brugssag. Sørg for at tjekke andre artikler om JPA for at lære mere om vedholdenhed.

Som altid er artiklens fulde kildekode tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found