En varias ocasiones hemos dicho que Hibernate utiliza unos ficheros de mapeo para relacionar tablas con objetos Java, hemos dicho también que estos ficheros están en formato XML y que tienen extensión .hbm.xml. Vamos a ver entonces uno de estos ficheros para entrar en detalle y tener al menos una idea de cómo funcionan.
En cyberHotel tenemos una clase que representa una dirección, por lo tanto podemos crear objetos dirección a partir de ella, esta clase dado que es un POJO tiene unos atributos y unos métodos get y set para acceder a los mismos.
Hemos llamado AddressTo a esta clase y addressTo.hbm.xml al fichero de mapeo, que como comentamos en otras ocasiones, se guarda en el mismo directorio de la clase de forma que está en su mismo paquete Java.
Esta es la estructura de addressTo.hbm.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping package=”gz.cyberbrain.cyberhotel.model.address.to“>
<class name=”AddressTo“ table=”direccion“>
<id name=”addressId“ column=”idDireccion“ type=”java.lang.Long“ unsaved-value=”null“>
<generator class=”increment“/>
</id>
<property name=”country“ column=”pais“ type=”string“/>
<property name=”province“ column=”provincia“ type=”string“/>
<property name=”locality“ column=”localidade“ type=”string“/>
</class>
<query name=”allAddresses“>from AddressTo</query>
<query name=”findByCountry“>from AddressTo address where address.country = ?</query>
<query name=”findByProvince“>from AddressTo address where address.country = ? and address.province = ?</query>
<query name=”findByLocality“>from AddressTo address where address.country = ? and address.province = ? and address.locality = ?</query>
</hibernate-mapping>
hibernate-mapping: Todos los ficheros de mapeo comienzan y acaban con esta etiqueta. Al comienzo indicamos en el atributo package el paquete Java donde se encuentra la clase.
class: Esta etiqueta engloba a la clase con sus atributos, indicando siempre el mapeo a la tabla de la base de datos, así indicamos en name el nombre de la clase y en table el nombre de la tabla a la que representa este objeto. Dentro de class distinguimos la etiqueta id en la cual se indica en name el campo que representa al atributo clave en la clase y en column su nombre sobre la tabla, en type el tipo de datos Java, esto es común para el resto de atributos, pero en id además tenemos la propiedad generator que indica la naturaleza del campo clave que en este caso es increment con lo que estamos diciendo que es un identificador autogenerado por la base de datos, si fuese asignado por el usuario sería assigned. Para más detalle se puede consultar la documentación de Hibernate.
El resto de atributos se indican en las etiquetas property asociando igualmente nombre del campo de la clase con nombre de columna sobre la tabla y el tipo de datos Java.
query: Aquí se indican las consultas que se quieren hacer sobre este objeto, escritas en código HQL (el SQL de Hibernate).