Saltar la navegación

5.2.- Ficheros de mapeo. Estructura, elementos y propiedades.

Caso práctico

Ya se ha configurado Hibernate y todo parece estar listo. La cuestión ahora es relacionar los objetos del programa orientado a objetos con las tablas de la base de datos relacional. Entran en juego los ficheros de mapeo.

Imagen que muestra a una mujer, ligeramente de espaldas, que está arreglando unos cables que se encuentran en el interior de un armario.

Fichero de mapeo ''.hbm.xml''

Para cada clase que queremos persistir se creará un fichero xml con la información que permitirá mapear la clase a una base de datos relacional. Este fichero estará en el mismo paquete que la clase a persistir.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Persistente.Departamentos" table="DEPARTAMENTOS" schema="ANTONIO">
    <id name="deptNo" type="byte">
      <column name="DEPT_NO" precision="2" scale="0" />
      <generator class="assigned" />
    </id>
    <property name="dnombre" type="string">
       <column name="DNOMBRE" length="15" />
    </property>
    <property name="loc" type="string">
      <column name="LOC" length="15" />
   </property>
    <set name="empleadoses" inverse="true">
    <key>
      <column name="DEPT_NO" precision="2" scale="0" not-null="true" />
    </key>
     <one-to-many class="Persistente.Empleados" />
    </set>
    </class>
</hibernate-mapping>

El significado del fichero anterior es el siguiente:

Hibernate-mapping: todos los ficheros de mapeo comienzan y acaban con esta etiqueta. 

Class: engloba la clase con sus atributos e incluye el mapeo  de la tabla de la base de datos. Name es el nombre de la clase, table es el nombre de la tabal de la base de datos que representa ese objeto y catalogo el nombre de la base de datos. 

El Singletón

Antes de crear la clase main, una vez implementado hibernate, debemos crear una instancia que nos permita trabajar con la base de datos y que se utilizará a lo largo de de toda la aplicación.


Un singletón es un patrón de diseño, realizado para restringir la creación de objetos pertenecientes a una clase. Su intención es garantizar que una clase solo tenga una instancia y proporcionar un punto de acceso global a ella.

El patrón singletón se implementa creando en nuestra clase un método que crea una instancia del objeto solo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado). Es una clase que ayuda y accede a SessionFactory para obtener un objeto de sesión. La clase se llama configure() y carga sobre el fichero de configuración hibernate.cfg.xml y entonces construye la SessionFactory para obtener el objeto de sesión. El nombre de la clase es SessionFatoryUtil.java y se incluirá en la clase main.

public class SessionFactoryUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory= new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

Para extraer un tabla concreta de la base de datos, la sintaxis en el mapeo requiere definir el POJO Nombre_Clase.hbm.xml, donde nombre_clase se corresponderá con el nombre la tabla que queremos extraer y donde se describe cómo se relacionan clases y tablas y propiedades y columnas.

Captura de pantalla donde se muestra el asistente de Hibernate para configurar el mapeo.

Mediante el asistente de NetBeans, seleccionamos Nuevo Mapeo en Hibernate y rellenamos los campos que nos piden, en función de la información que nos interese extraer de la base de datos.

De esta manera, NetBeans genera un POJO nombre_clase.java (siendo nombre_clase aquella tabla cuya información nos interesa extraer de la base de datos) con todos los campos necesarios.

Con ello, genera un fichero de mapeo de Hibernate, agregando su entrada a Hibernate.cfg.xml, entre las etiquetas .