sábado, 2 de junio de 2012

6.4 Manejo de Objetos Persistentes


Muchas aplicaciones Java necesitan tratar con datos persistentes. En la mayoría de los casos, esto significa encararse con una base de datos relacional, posiblemente un base de datos obsoleta (o antigua) o un Sistema de Manejo de Bases de Datos (DBMS) estándar industrial. El API JDBC y los drivers para la mayoría de los sistemas de bases de datos proporcionan una forma estándar de utilizar SQL para ejecutar consultas a la base de datos. Sin embargo, el interface se complica por la "diferencia de impedancia" entre el modelo de objetos de dominio de la aplicación y el modelo relacional de la base de datos. El modelo de objetos está basado en principios de ingeniería de software y modela los objetos en el dominio del problema, mientras que el modelo relacional está basado en principios matemáticos y organiza los datos para una almacenamiento y recuperación eficientes. Ninguno de estos modelos es particularmente mejorque el otro, pero el problema es que son diferentes y no siempre se acoplan de forma confortable en la misma aplicación.

Algunas soluciones a este problema, como Hibernate y Java Data Objects, están diseñados para proporcionar al desarrallodor la persistencia transparente: la aplicación trata con objetos persistentes utilizano un API orientado a objetos sin la necesidad de código SQL embebido en el código Java.

 HIBERNATE


Hibernate funciona mejor si estas clases siguen algunas reglas simples, también conocidas como el modelo de programación POJO (Plain Old Java Object). Sin embargo, ninguna de estas reglas son requerimientos rígidos. De hecho, Hibernate3 asume muy poco acerca de la naturaleza de sus objetos persistentes. Puede expresar un modelo de dominio en otras formas (por ejemplo, utilizando árboles de instancias de Map).
Ejemplo simple de POJO
La mayoría de aplicaciones Java requieren una clase persistente que represente a los felinos. Por ejemplo:
package eg;
import java.util.Set;
import java.util.Date;

public class Cat {
    private Long id; // identifier
    private Date birthdate;
    private Color color;
    private char sex;
    private float weight;
    private int litterId;
    private Cat mother;
    private Set kittens = new HashSet();
    private void setId(Long id) {
        this.id=id;
    }
    public Long getId() {
        return id;
    }
    void setBirthdate(Date date) {
        birthdate = date;
    }
    public Date getBirthdate() {
        return birthdate;
    }
    void setWeight(float weight) {
        this.weight = weight;
    }
    public float getWeight() {
        return weight;
    }
public Color getColor() {
        return color;
    }
    void setColor(Color color) {
        this.color = color;
    }
    void setSex(char sex) {
        this.sex=sex;
    }
    public char getSex() {
        return sex;
    }
    void setLitterId(int id) {
        this.litterId = id;
    }
    public int getLitterId() {
        return litterId;
    }
    void setMother(Cat mother) {
        this.mother = mother;
    }
    public Cat getMother() {
        return mother;
    }
    void setKittens(Set kittens) {
        this.kittens = kittens;
    }
    public Set getKittens() {
        return kittens;
    }
public void addKitten(Cat kitten) {
            kitten.setMother(this);
        kitten.setLitterId( kittens.size() ); 
        kittens.add(kitten);
    }
}


No hay comentarios:

Publicar un comentario