Desfase Objeto-Relacional

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Desfase objeto-relacional

El desfase objeto-relacional surge cuando en el desarrollo de una aplicación con un


lenguaje orientado a objetos se hace uso de una base de datos relacional. Hay que tener
en cuenta que esta situación se da porque tanto los lenguajes orientados a objetos como
las bases de datos relacionales están ampliamente extendidas.

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 class Personaje {


private int id;
private String nombre;
private String descripcion;
private int vida;
private int ataque;

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.

CREATE TABLE personajes (


id INT PRIMARY KEY AUTO_INCREMENT;
nombre VARCHAR(50) NOT NULL,
descripcion VARCHAR(50),
vida INT DEFAULT 10,
ataque INT DEFAULT 10;
);
Eso hace que tengamos que estar continuamente descomponiendo los objetos para
escribir la sentencia SQL para insertar, modificar o eliminar, o bien recomponer todos los
atributos para formar el objeto cuando leamos algo de la base de datos.

ORM (Mapeo Objeto-Relacional)

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).

ORM ==> Conectores ==> Gestores de Bases de Datos

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();
. . .

Si contamos con un framework como Hibernate, esta misma operación se traduce en


unas pocas líneas de código en las que podemos trabajar directamente con el objeto
Java, puesto que el framework realiza el mapeo en función de las anotaciones que hemos
implementado a la hora de definir la clase, que le indican a éste con que tabla y campos
de la misma se corresponde la clase y sus atributos, respectivamente.

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)

También podría gustarte