Velden met de JPA @Transient-annotatie negeren

1. Inleiding

Bij het persistent maken van Java-objecten in databaserecords met behulp van een Object-Relational Mapping (ORM) -raamwerk, willen we vaak bepaalde velden negeren. Als het framework compatibel is met de Java Persistence API (JPA), kunnen we het @Transient annotatie bij deze velden.

In deze zelfstudie demonstreren we het juiste gebruik van de @Transient annotatie. We zullen ook kijken naar de relatie met de ingebouwde versie van Java voorbijgaand trefwoord.

2. @Transient Annotatie vs. voorbijgaand Trefwoord

Er is over het algemeen enige verwarring over de relatie tussen de @Transient annotatie en ingebouwde Java voorbijgaand trefwoord. De voorbijgaand trefwoord is primair bedoeld voor het negeren van velden tijdens Java-objectserialisering, maar het voorkomt ook dat deze velden behouden blijven bij gebruik van een JPA-framework.

Met andere woorden, de voorbijgaand trefwoord heeft hetzelfde effect als het @Transient annotatie bij het opslaan in een database. echter, de @Transient annotatie heeft geen invloed op de serialisering van Java-objecten.

3. PPV @Transient Voorbeeld

Laten we zeggen dat we een Gebruiker class, wat een JPA-entiteit is die is toegewezen aan een gebruikers-tabel in onze database. Wanneer een gebruiker inlogt, halen we zijn record op uit de tabel Gebruikers en stellen we enkele extra velden in op het Gebruiker entiteit achteraf. Deze extra velden komen niet overeen met kolommen in de tabel Gebruikers omdat we deze waarden niet willen opslaan.

We stellen bijvoorbeeld een tijdstempel in op de Gebruiker entiteit die aangeeft wanneer de gebruiker zich heeft aangemeld bij zijn huidige sessie:

@Entity @Table (name = "Users") openbare klasse Gebruiker {@Id privé Geheel getal-id; privé String-e-mail; privé String-wachtwoord; @Transient privé Datum loginTime; // getters en setters}

Wanneer we dit opslaan Gebruiker bezwaar maken tegen de database met behulp van een JPA-provider zoals Hibernate, negeert de provider de loginTime veld vanwege de @Transient annotatie.

Als we dit serialiseren Gebruiker bezwaar maken en het doorgeven aan een andere service in ons systeem, het loginTime veld zal worden opgenomen in de serialisering. Als we dit veld niet wilden opnemen, zouden we de @Transient annotatie met de voorbijgaand trefwoord in plaats daarvan:

@Entity @Table (name = "Users") openbare klasse Gebruiker implementeert Serializable {@Id privé Integer-id; privé String-e-mail; privé String-wachtwoord; privé voorbijgaande datum loginTime; // getters en setters}

Nu de loginTime veld wordt genegeerd tijdens databasepersistentie en objectserialisering.

4. Conclusie

In dit artikel hebben we onderzocht hoe we de PPV goed kunnen gebruiken @Transient annotatie in een typisch gebruiksscenario. Bekijk ook andere artikelen over JPA voor meer informatie over persistentie.

Zoals altijd is de volledige broncode van het artikel beschikbaar op GitHub.