Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Gimenoblog

Mapeo objeto-relacional (fine grained objects)

Septiembre 26th, 2005 - [Enlace local]

Hola. Este es último post sobre el mapeo objeto-relacional. Voy a hablar de los fine grained objects que llamaré objetos de baja granularidad u objetos de grano fino (si alguien conoce una traducción mejor...).

Supongamos que tenemos un modelo de objetos en el que hay una clase Persona y otra Direccion. Persona tiene nombre, apellidos,... y Direccion tiene ciudad, calle,... Cada persona tiene una dirección y cada dirección pertenece sólo a una persona. De modo que tenemos una relación 1 a 1. Desde el punto de vista del diseño de la base de datos lo más razonable sería crear una tabla "personas" que tuviera como columnas: nif, nombre, apellidos, fecha_nacimiento, direccion_calle, direccion_ciudad,... Es decir guardamos todos los datos en la misma tabla.

A la hora de cargar un registro de la base de datos haremos algo así...

Persona persona = new Persona();
persona.setDireccion(new Direccion());
persona.setNif(result.getInt("nif"));
persona.setNombre(result.getString("nombre"));
persona.setApellidos(result.getString("apellidos"));
// más campos de Persona
persona.getDireccion().setCiudad(result.getString("direccion_ciudad"));
persona.getDireccion().setCalle(result.getString("direccion_calle"));
// más campos de Direccion

Es decir, en la misma tabla tenemos dos clases que no comparten herencia. La clave primaria de la tabla es "nif", que es la clave primaria para cada persona. Sin embargo Direccion no tiene clave primaria; es un objeto "de segunda". A esto se llama fine grained object.

Algunas herramientas de mapeo objeto-relacional no soportan los objetos de baja granularidad, así que si usamos una de ellas tendríamos que eliminar la clase Direccion y agregar todos sus campos a la clase Persona, con lo que la clase Persona quedaría algo así...

public class Persona implements Serializable {

    private int nif;
    private String nombre;
    private String apellidos;
    private String direccionCiudad;
    private String direccionCalle;
    // etc.
}

El inconveniente es que este es un modelo de objetos más pobre. Hibernate soporta los objetos de grano fino.

Bueno, con esto concluyo. Espero que os haya gustado :P.

» Leer más, comentarios, etc...