Transient en Java

Mohammad Irfan 12 octubre 2023
  1. Hacer variable transitoria en Java
  2. Hacer variable transitoria en la clase de entidad Hibernate en Java
Transient en Java

Este tutorial presenta qué es la palabra clave transient y cómo usarla en aplicaciones en Java.

Transient es una palabra clave en Java que se utiliza para marcar una variable como no serializable. Se usa cuando estamos serializando un objeto.

La serialización es el proceso de transformar un objeto Java en un flujo de bytes. Por lo tanto, se puede conservar en un archivo, y cuando queremos evitar que cualquier campo persista en un archivo, lo marcamos como transitorio.

No podemos marcar ningún método transitorio, solo campos. Entendamos con algunos ejemplos.

Para hacer una clase serializable, primero necesitamos implementar la interfaz Seriablizable y luego usar la palabra clave transitoria con variables. A continuación se muestra un ejemplo de clase serializable que implementa una interfaz Serializable. Sin embargo, no marca ningún campo como transitorio.

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

Hacer variable transitoria en Java

En este ejemplo, tenemos una clase Student que implementa la interfaz Serializable y marca el correo electrónico como transitorio. Entonces, cuando escribimos sus estados en un archivo, solo se escriben name e id en el archivo. Los datos del email no se escriben. Puede verificarlo leyendo el mismo archivo y mostrando los datos en la consola. Vea el ejemplo a continuación.

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

Producción :

10 Rohan null 1

Puede observar en la salida que el correo electrónico es nulo.

Hacer variable transitoria en la clase de entidad Hibernate en Java

Si está trabajando con hibernación y desea hacer que algunas variables / campos sean transitorios, use el modificador @Transient. Saltará la escritura de datos en la tabla de la base de datos. Esta anotación es útil solo cuando está trabajando con hibernate y, dado que se trata de una anotación, debe importar todos los archivos JAR necesarios a su proyecto. Vea el ejemplo a continuación.

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