Herramientas de usuario

Herramientas del sitio


unidades:02_hibernate:03_configurando

Configurando

Como con cualquier otro framework es necesario configurarlo para su correcto funcionamiento. Ya hemos visto que se puede configurar usando los ficheros de mapeo o las anotaciones Mapeo de una Entidad. Sin embargo, aún quedan aspectos que debemos configurar como:

  • Datos de conexión a la base de datos
  • Ubicación de las clases a persistir.
  • Ubicación de los ficheros .hbm.xml.
  • Nivel de Log
  • Etc, etc.

hibernate.cfg.xml

La forma de configurar hibernate es usando el fichero XML de configuración llamado hibernate.cfg.xml. Este fichero deberemos guardarlo en el paquete raíz de nuestras clases Java, es decir fuera de cualquier paquete.Si estamos usando NetBeans deberá ser en la carpeta src de nuestro proyecto.

La información que contiene es la siguiente:

  • Propiedades de configuración.
  • Las clases que se quieren mapear.

El fichero tiene la siguiente estructura:

1| Fichero hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost/hibernate1</property>
    <property name="connection.username">hibernate1</property>
    <property name="connection.password">hibernate1</property>
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <property name="hibernate.show_sql">true</property>
 
    <mapping resource="ejemplo01/Profesor.hbm.xml"/>
    <mapping class="ejemplo01.Profesor"/>
 
  </session-factory>
</hibernate-configuration>

Podemos ver que el fichero hibernate.cfg.xml es un típico fichero xml.

  • En la línea 1 vemos la declaración de que es un fichero XML.
  • En la línea 2 se aprecia la declaración del DOCTYPE junto con la referencia al documento http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd DTD que permite validarlo. Es decir que si nos descargamos el fichero hibernate-configuration-3.0.dtd podremos saber todos los elementos que hay en un fichero de mapeo.
  • El tag raiz del documento xml se llama <hibernate-configuration> y se encuentra en la línea 3.
  • Dentro del tag <hibernate-configuration> encontramos,en la línea 4, el tag <session-factory> que contendrá la configuración de hibernate.
  • Las siguientes 5 líneas (desde la 5 a la 10) contienen propiedades de configuración mediante el tag <property>
    • El atributo name contiene el nombre de la propiedad de configuración.
    • El contenido del tag <property> define el valor de la propiedad de configuración.
  • Las líneas 12 y 13 contienen el tag <mapping> que se usa para indicarle a hibernate las clases que queremos usar desde hibernate.
    • El atributo resource contiene el nombre de un fichero .hbm.xml asociada a la clase que queremos persistir. En nuestro caso del fichero Profesor.hbm.xml.
    • El atributo class contiene la FQCN 1) de la clase que queremos persistir. En nuestro ejemplo será la clase ejemplo02.Usuario.
Para una misma clase solo es necesario indicar una única vez el tag <mapping> con el atributo resource o class.

En el fichero se ha incluido dos veces para indicar las dos posibilidades excluyentes.

Si buscamos documentación sobre hibernate podemos encontrar que el DOCTYPE del fichero hibernate.cfg.xml antes de la versión 3.6 era 2) :
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

Así que no confundirlo al hacer algún copy-empastre desde algún tutorial de Internet de versiones anteriores.

Pasemos ahora a explicar en detalle los tag <property> y <mapping>.

Tag <property>

El tag <property> se usa para definir cada una de las propiedades de configuración 3) de hibernate. Como ya hemos indicado consta del atributo name con el nombre de la propiedad de configuración. Dentro del tag <property> incluiremos el valor de dicha propiedad de configuración.

Volvamos ahora a ver las propiedades de configuración del fichero

1 | Propiedades de configuración hibernate.cfg.xml
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate1</property>
<property name="connection.username">hibernate1</property>
<property name="connection.password">hibernate1</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>

Estas propiedades se usan para poder conectarse mediante JDBC a la base de datos.

Propiedad de configuración Explicación
connection.driver_class Contiene la FQCN del driver de la base de datos a usar.
connection.url La URL de conexión a la base de datos tal y como se usa en JDBC
connection.username El usuario de la base de datos
connection.password La contraseña de la base de datos
dialect El lenguaje de SQL que usará Hibernate contra la base de datos. Este parámetro es opcional ya que hibernate lo puede intentar deducir a partir de los datos de la conexión 4). Los posibles valores de esta propiedad de configuración son la FQCN de una clase Java que extienda de la clase org.hibernate.dialect.Dialect. La lista de dialectos que soporta hibernate se encuentra en el paquete org.hibernate.dialect.
hibernate.show_sql Propiedad opcional que indica si se mostrará por la consola la SQL que lanza Hibernate contra la base de datos. Su posibles valores son true o false. Esta propiedad es muy útil mientras programamos ya que nos ayudará a entender cómo está funcionanado Hibernate
connection.datasource Indica el nombre del DataSource con el que se conectará Hibernate a la base de datos. En caso de estar esta propiedad no debería estar ninguna de las 4 primeras propiedades sobre la conexión o viceversa. Esta propiedad se usa en aplicaciones Web ya que los datos de la conexión se definen en el servidor de aplicaciones y se accede a la base de datos a través del DataSource.
Al utilizar la propiedad connection.datasource recuerda que antes del nombre que se le haya dado al datasource hay que añadir:
java:/comp/env/

Es decir que si nuestro datasource se llama jdbc/hibernate1 el valor de connection.datasource deberá ser:

java:/comp/env/jdbc/hibernate1
Los dialectos de hibenate son importantes ya que indican en qué base de datos podemos usarlo. En caso de que una base de datos no esté soportada , se puede definir una nueva clase que extienda de org.hibernate.dialect.Dialect para poder soportar dicha base de datos.

Tag <mapping>

El tag <mapping> se usa para indicarle a Hibernate las clases queremos mapear. Este tag se usa de 2 formas distintas:

Fichero de mapeo .hbm.xml

Si hemos creado un fichero de mapeo .hbm.xml para poder persistir una clase Java a la base de datos , deberemos utilizar el atributo resource en el tag <mapping>.

<mapping resource="ejemplo01/Profesor.hbm.xml"/>

El atributo resource contiene el path dentro de los paquetes Java al fichero .hbm.xml.

Nótese que para separar el path se usa la barra y no el punto.
Estamos indicando un path dentro del sistema de paquetes de Java y NO una ruta en el sistema de ficheros del disco duro.

FQCN de la clase Java

Si la clase Java la hemos anotado para poder persistirla en vez de usar el fichero .hbm.xml deberemos utilizar el atributo class en el tag <mapping>.

<mapping class="ejemplo01.Profesor"/>

El atributo class contiene la FQCN de la clase Java que deseamos que se pueda persistir.

Nótese que para separar los paquetes ahora se usa el punto en vez de la barra.

Referencias

1)
Fully-Qualified Class Name. Es decir el nombre completo de una clase Java incluyendo el paquete al que pertenece.
3)
también llamadas parámetros de configuración o opciones de configuración
unidades/02_hibernate/03_configurando.txt · Última modificación: 2023/04/07 21:26 por 127.0.0.1