Ignorer les champs avec l'annotation JPA @Transient

1. Introduction

Lors de la persistance d'objets Java dans des enregistrements de base de données à l'aide d'un framework ORM (Object-Relational Mapping), nous voulons souvent ignorer certains champs. Si le framework est compatible avec l'API Java Persistence (JPA), nous pouvons ajouter l' annotation @Transient à ces champs.

Dans ce didacticiel, nous allons démontrer l'utilisation correcte de l' annotation @Transient . Nous examinerons également sa relation avec le mot clé transitoire intégré de Java .

2. Annotation @Transient vs mot-clé transitoire

Il y a généralement une certaine confusion sur la relation entre l' annotation @Transient et le mot - clé transient intégré de Java . Le mot clé transitoire est principalement destiné à ignorer les champs lors de la sérialisation d'objets Java, mais il empêche également la persistance de ces champs lors de l'utilisation d'un framework JPA.

En d'autres termes, le mot-clé transitoire a le même effet que l' annotation @Transient lors de l'enregistrement dans une base de données. Cependant, l' annotation @Transient n'affecte pas la sérialisation des objets Java.

3. Exemple de JPA @Transient

Disons que nous avons une classe User , qui est une entité JPA mappée à une table Users dans notre base de données. Lorsqu'un utilisateur se connecte, nous récupérons son enregistrement à partir de la table Users, puis nous définissons des champs supplémentaires sur l' entité User par la suite. Ces champs supplémentaires ne correspondent à aucune colonne de la table Utilisateurs car nous ne souhaitons pas enregistrer ces valeurs.

Par exemple, nous allons définir un horodatage sur l' entité Utilisateur qui représente le moment où l'utilisateur s'est connecté à sa session actuelle:

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

Lorsque nous enregistrons cet objet User dans la base de données à l'aide d'un fournisseur JPA comme Hibernate, le fournisseur ignore le champ loginTime en raison de l' annotation @Transient .

Si nous sérialisons cet objet User et le transmettons à un autre service de notre système, le champ loginTime sera inclus dans la sérialisation. Si nous ne voulions pas inclure ce champ, nous pourrions remplacer l' annotation @Transient par le mot clé transient à la place:

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

Désormais, le champ loginTime est ignoré lors de la persistance de la base de données et de la sérialisation des objets.

4. Conclusion

Dans cet article, nous avons étudié comment utiliser correctement l' annotation JPA @Transient dans un cas d'utilisation typique. N'oubliez pas de consulter d'autres articles sur JPA pour en savoir plus sur la persistance.

Comme toujours, le code source complet de l'article est disponible à l'adresse over sur GitHub.