Transient en Java

Mohammad Irfan 12 octobre 2023
  1. Créer une variable transitoire en Java
  2. Créer une variable transitoire dans la classe d’entité Hibernate en Java
Transient en Java

Ce didacticiel présente ce qu’est le mot-clé Transient et comment l’utiliser dans des applications en Java.

Transient est un mot-clé en Java qui est utilisé pour marquer une variable comme non sérialisable. Il est utilisé lorsque nous sérialisons un objet.

La sérialisation est le processus de transformation d’un objet Java en un flux d’octets. Ainsi, il peut être persisté dans un fichier, et lorsque nous voulons éviter qu’un champ persiste dans un fichier, nous marquons ce transitoire.

Nous ne pouvons marquer transitoire aucune méthode, mais uniquement les champs. Comprenons avec quelques exemples.

Pour rendre une classe sérialisable, il faut d’abord implémenter l’interface Seriablizable puis utiliser le mot-clé transient avec des variables. Vous trouverez ci-dessous un exemple de classe sérialisable qui implémente une interface Serializable. Cependant, il ne marque aucun transitoire de champ.

class Student implements Serializable {
  /*
   *  non- transient fields
   */
  int id;
  String name;
  String email;
}

Créer une variable transitoire en Java

Dans cet exemple, nous avons une classe Student qui implémente l’interface Serializable et marque l’e-mail comme transitoire. Ainsi, lorsque nous écrivons ses états dans un fichier, seuls name et id sont écrits dans le fichier. Les données email ne sont pas écrites. Vous pouvez le vérifier en lisant le même fichier et en affichant les données sur la console. Voir l’exemple ci-dessous.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class SimpleTesting {
  public static void main(String[] args) throws IOException, ClassNotFoundException {
    Student student = new Student();
    student.setId(10);
    student.setName("Rohan");
    student.setEmail("rohan@gmail.com");

    // Writing to a file
    FileOutputStream fileStream = new FileOutputStream("student.txt");
    ObjectOutputStream outStream = new ObjectOutputStream(fileStream);
    outStream.writeObject(student);
    outStream.flush();
    outStream.close();
    fileStream.close();

    // Reading file
    ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("student.txt"));
    student = (Student) inputStream.readObject();
    System.out.println(student.id + " " + student.name + " " + student.email);
    System.out.println(Student.getSerialversionuid());
    inputStream.close();
  }
}

class Student implements Serializable {
  private static final long serialVersionUID = 1L;
  int id;
  String name;
  transient String email;

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }
  public static long getSerialversionuid() {
    return serialVersionUID;
  }
}

Production :

10 Rohan null 1

Vous pouvez remarquer dans la sortie que l’e-mail est nul.

Créer une variable transitoire dans la classe d’entité Hibernate en Java

Si vous travaillez avec hibernate et que vous souhaitez rendre certaines variables/champs transitoires, utilisez le modificateur @Transient. Il ignorera l’écriture des données dans la table de la base de données. Cette annotation n’est utile que lorsque vous travaillez avec hibernate, et puisqu’il s’agit d’une annotation, vous devez importer tous les JAR requis dans votre projet. Voir l’exemple ci-dessous.

@Entity
class Student implements Serializable {
  @Id int id;
  String name;
  @Transient String email; // transient

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }
}