Se conoce como Persistencia a la acción de guardar en un archivo la información de un objeto para luego volver a recuperarla, sin hacer uso de la Ram.
Existen Frameworks que permiten utilizar de forma mas fácil la Persistencia como por ejemplo pueden ser Hibernate, Toplink, etc.
Para poder llevar a cabo la acción de Persistencia podemos utilizar la interfaz Serializable, que serializará un objeto para luego reconstruirlo de nuevo.
Los campos del objeto marcados con transient no serán serializados.
Ejemplo:
public class serialization {
public static void main(String args[]){
try {//serializacion
//crea el objecto e imprime sus valores por consola
//clase pojo abajo
MyPojo object1 = new MyPojo("Hello Persisted Object!", -33, 2.72);
System.out.println("object1: " + object1);
//crea un fichero para persistir el objeto
FileOutputStream fos = new FileOutputStream("persisted-object.file");
ObjectOutputStream oos = new ObjectOutputStream(fos);
//escribe el objeto serializado a un archivo
oos.writeObject(object1);
oos.flush();
oos.close();
}catch (Exception e) {
System.out.println("Exception during serialization: " + e);
System.exit(0);
}
// Deserialización de objeto
try {
MyPojo object2;
//abre el archivo
FileInputStream fis = new FileInputStream("persisted-object.file");
ObjectInputStream ois = new ObjectInputStream(fis);
//lee el objeto del archivo
object2 = (MyPojo) ois.readObject();
ois.close();
//imprime los valores del objeto persistido
System.out.println("object2: " + object2);
System.out.println("object2 mystring: " +object2.getMyString());
//saca por pantalla null porque myTransString está marcado como transient
System.out.println("object2 mystring2: " +object2.getMyTransString());
} catch (Exception e) {
System.out.println("Exception during deserialization: " + e);
System.exit(0);
}
}
}
//Pojo serializado
class MyPojo implements Serializable {
public MyPojo(String mystring, int intVal1, double doubleVal) {
this.myString = mystring;
this.intVal1 = intVal1;
this.doubleVal = doubleVal;
this.myTransString = "Este valor no se persistirá.";
}
//safety ID
private static final long serialVersionUID = 1234233342333L;
//campos para persistir
private String myString;
private int intVal1;
private double doubleVal;
//campos que no serán persistidos
private transient String myTransString;
//getters y setters
public String getMyString() {
return myString;
}
public void setMyString(String myString) {
this.myString = myString;
}
public String getMyTransString() {
return myTransString;
}
public void setMyTransString(String myTransString) {
this.myTransString = myTransString;
}
public int getIntVal1() {
return intVal1;
}
public void setIntVal1(int intVal1) {
this.intVal1 = intVal1;
}
public double getDoubleVal() {
return doubleVal;
}
public void setDoubleVal(double doubleVal) {
this.doubleVal = doubleVal;
}
//para sacar todos los valores persistibles por pantalla
@Override
public String toString() {
return "mystring=" + myString + "; intVal1=" + intVal1 + "; doubleVal=" + doubleVal;
}
}
Persistencia API de Java
Beans de Entidad
Los
EJB de entidad están directamente relacionados con los datos de la
aplicación, son objetos que mantienen en memoria los datos que
maneja la aplicación, las entidades que disponen de persistencia,
Noticias, Usuarios, Clientes, etc...
Anotaciones de entidades POJO's:
Anotación
@Entity Indica
que el objeto es una entidad.
Anotación Table indica la tabla de base de datos
que contiene objetos de este tipo.
Toda entidad debe tener una clave
primaria que se debe identificar con la anotación @Id. Además,
todas las entidades deben contener un constructor vacío.
Anotaciones
@Id, @IdClass, @EmbeddedId
Se
emplean para declarar claves primarias de clases, bien de forma
simple @Id o compuesta @IdClass y @EmbeddedId.
Veamos
un código utilizando @IdClass:
@Entity
@IdClass(PersonaId.class)
public class Persona {
@Id
private int id;
@Id
private String nombre;
...
public Persona() { }
//METODOS Getters y Setters
}
public class PersonaId {
int id;
String nombre;
public boolean equals(Object o) {
// Codigo que comprueba si las dos entidades son iguales
}
}
Y
ahora un código utilizando @EmbeddedId
@Entity
public class Persona {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "id", column = @Column(name = "ID",
nullable = false, precision = 5, scale = 0)),
@AttributeOverride(name = "nombre", column = @Column(name = "NOMBRE"
nullable = false, length = 50)),
})
private PersonaId id;
public Persona() { }
//Métodos Getters y Setters
}
@Embedded
public class PersonaId {
int id;
String nombre;
public PersonaId() { }
public boolean equals(Object o) {
// Codigo que comprueba si las dos entidades son iguales
}
}
@Entity
@Table(name="PERSONAS")
public class Persona {
@Id
private String nombre;
@Embedded
@AttributeOverrides({@AttributeOverride(name="codigoPostal",
column=@Column(name="CODIGOPOSTAL")),
@AttributeOverride(name="direccionPostal",
column=@Column(name="DIRECCIONPOSTAL"))
})
private Direccion direccion;
public Persona() { }
//Métodos Getters y Setters
}
@Embeddable
public class Direccion implements Serializable {
private String direccionPostal;
private String ciudad;
private int codigoPostal;
private String pais;
public Direccion() { }
public boolean equals(Object o) {
// Codigo que comprueba si las dos entidades son iguales
}
}
No hay comentarios:
Publicar un comentario