Ignorare i campi con l'annotazione JPA @Transient

1. Introduzione

Quando si persistono oggetti Java nei record del database utilizzando un framework ORM (Object-Relational Mapping), spesso si desidera ignorare determinati campi. Se il framework è compatibile con Java Persistence API (JPA), possiamo aggiungere l' annotazione @Transient a questi campi.

In questo tutorial, dimostreremo l'uso corretto dell'annotazione @Transient . Vedremo anche la sua relazione con la parola chiave transitoria incorporata di Java .

2. Annotazione @Transient vs. parola chiave transitoria

Generalmente c'è una certa confusione sulla relazione tra l' annotazione @Transient e la parola chiave transitoria incorporata di Java . La parola chiave transient è pensata principalmente per ignorare i campi durante la serializzazione degli oggetti Java, ma impedisce anche che questi campi vengano mantenuti quando si utilizza un framework JPA.

In altre parole, la parola chiave transient ha lo stesso effetto dell'annotazione @Transient quando si salva in un database. Tuttavia, l' annotazione @Transient non influisce sulla serializzazione degli oggetti Java.

3. Esempio JPA @Transient

Supponiamo di avere una classe User , che è un'entità JPA che mappa a una tabella Users nel nostro database. Quando un utente effettua il login, recuperiamo il suo record dalla tabella Users e successivamente impostiamo alcuni campi aggiuntivi nell'entità User . Questi campi extra non corrispondono ad alcuna colonna nella tabella Users perché non vogliamo salvare questi valori.

Ad esempio, imposteremo un timestamp sull'entità Utente che rappresenta quando l'utente ha effettuato l'accesso alla sessione corrente:

@Entity @Table(name = "Users") public class User { @Id private Integer id; private String email; private String password; @Transient private Date loginTime; // getters and setters }

Quando salviamo questo oggetto Utente nel database utilizzando un provider JPA come Hibernate, il provider ignora il campo loginTime a causa dell'annotazione @Transient .

Se serializziamo questo oggetto Utente e lo passiamo a un altro servizio nel nostro sistema, il campo loginTime verrà incluso nella serializzazione. Se non volessimo includere questo campo, potremmo sostituire l' annotazione @Transient con la parola chiave transitoria :

@Entity @Table(name = "Users") public class User implements Serializable { @Id private Integer id; private String email; private String password; private transient Date loginTime; //getters and setters }

Ora, il campo loginTime viene ignorato durante la persistenza del database e la serializzazione degli oggetti.

4. Conclusione

In questo articolo, abbiamo esaminato come utilizzare correttamente l' annotazione JPA @Transient in un tipico caso d'uso. Assicurati di controllare altri articoli su JPA per saperne di più sulla persistenza.

Come sempre, il codice sorgente completo dell'articolo è disponibile su GitHub.