Desfase Objeto-Relacional
Desfase Objeto-Relacional
Desfase Objeto-Relacional
En cuanto al desfase, ocurre que en nuestra aplicación Java (como ejemplo de lenguaje
Orientada a Objetos) tendremos, por ejemplo, la definición de una clase cualquiera con
sus atributos y métodos:
public Personaje(. . .) {
. . .
}
// getters y setters
}
}
Mientras que en la base de datos tendremos una tabla cuyos campos se tendrán que
corresponder con los atributos que hayamos definido anteriormente en esa clase. Puesto
que son estructuras que no tienen nada que ver entre ellas, tenemos que hacer el mapeo
manualmente, haciendo coincidir (a través de los getters o setters) cada uno de los
atributos con cada uno de los campos (y vicerversa) cada vez que queramos leer o
escribir un objeto desde y hacia la base de datos, respectivamente.
Convertir los tipos de datos de la POO a los tipos de datos de un sistemas Gestos de
Base de Datos relacional.
Transformar una fila de una tabla de nuestra base de datos a un objeto de un lenguaje
POO, cada una de las columns se convierte en una propiedad del objeto.
Tabien se conoce como ORM a los frameworks que la implementan como Hibernate
(java), el uso de un ORM introduce una capa de abstraccion entre el desarrolado y la base
de datos (anotaciones dentro del código).
Por ejemplo, si trabajamos directamente con JDBC tendremos que descomponer el objeto
para construir la sentencia INSERT del siguiente ejemplo:
. . .
String sentenciaSql = "INSERT INTO personajes (nombre, descripcion, vida, ataque)"
+
") VALUES (?, ?, ?, ?)";
PreparedStatement sentencia = conexion.prepareStatement(sentenciaSql);
sentencia.setString(1, personaje.getNombre());
sentencia.setString(2, personaje.getDescripcion());
sentencia.setInt(3, personaje.getVida());
sentencia.setInt(4, personaje.getAtaque());
sentencia.executeUpdate();
if (sentencia != null)
sentencia.close();
. . .
Entity
@Table(name="personajes")
public class Personaje {
@Id // Marca el campo como la clave de la tabla
@GeneratedValue(strategy = IDENTITY)
@Column(name="id")
private int id;
@Column(name="nombre")
private String nombre;
@Column(name="descripcion")
private String descripcion;
@Column(name="vida")
private int vida;
@Column(name="ataque")
private int ataque;
public Personaje(. . .) {
. . .
}
// getters y setters
}
Así, podemos simplemente establecer una sesión con la Base de Datos y enviarle el
objeto, en este caso invocando al método save que se encarga de registrarlo en la Base
de Datos donde convenga según sus propias anotaciones.
. . .
sesion = HibernateUtil.getCurrentSession();
sesion.beginTransaction();
sesion.save(personaje);
sesion.getTransaction().commit();
sesion.close();
. . .
Hibernate
Es una herramienta ORM, trabajamos en un modelo orientado a objetos y queremos
trabajar en un modelo relacional.
Usado en la capa de datos de las apliaciones para la persistencia de datos.
Implementa JPA (java persistence API)