Crear el persistence.xml

Para declarar cómo acceder a la base de datos y qué driver JDBC utilizar, el archivo persistence.xml proporciona esto junto a la lista de clases que van a actuar como Entidades y otra configuración que depende de la propia implementación JPA que se esté utilizando, en este caso Hibernate.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Para poner en marcha Hibernate con JPA y conectar nuestra aplicación Java a una base de datos, es fundamental crear un archivo de configuración llamado persistence.xml. Este archivo es el puente que une Hibernate, que actúa como nuestra implementación de JPA, con la base de datos que vayamos a utilizar, ya sea H2, MySQL, PostgreSQL u otra.

Antes de crear este archivo, debemos asegurarnos de tener todas las dependencias necesarias instaladas. Si no estamos usando JavaEE, necesitaremos las clases de la API de persistencia JPA, incluyendo el Entity Manager. Además, debemos contar con el driver JDBC correspondiente a la base de datos que vayamos a usar. Por ejemplo, si optamos por H2, que es muy recomendable para empezar por su sencillez, solo tendremos que añadir el JAR que incluye el driver JDBC integrado. Esto nos permite trabajar sin configurar servidores, sockets ni servicios adicionales, ya que H2 puede funcionar con bases de datos en disco o en memoria, y el propio driver se encarga de todo.

El archivo persistence.xml debe ubicarse en un lugar muy concreto para que Hibernate pueda encontrarlo. Si usamos Maven o Gradle, debemos crear una carpeta llamada META-INF dentro del directorio src/main/resources, ya que este directorio forma parte del classpath de la aplicación. El archivo XML debe estar dentro de esta carpeta META-INF. En aplicaciones Java Enterprise, la ubicación cambia un poco: el archivo debe ir dentro de la carpeta META-INF que se encuentre en WEB-INF/classes o en una ruta similar, siempre asegurándonos de que esté en el classpath.

El contenido del archivo persistence.xml comienza con la etiqueta raíz <persistence>, que indica que se trata de un archivo de configuración de persistencia. Dentro de esta etiqueta, definimos al menos una unidad de persistencia con <persistence-unit>, a la que le asignamos un nombre identificativo. Este nombre será el que utilicemos para referirnos a esta unidad cuando trabajemos con JPA.

Dentro de la unidad de persistencia, podemos listar las clases que queremos que gestione el Entity Manager mediante etiquetas <class>, aunque esto lo veremos en detalle en otros momentos. Lo más importante aquí son las propiedades que definen la conexión con la base de datos y el comportamiento de Hibernate.

Entre estas propiedades, debemos especificar el driver JDBC que usaremos, por ejemplo, org.h2.Driver para H2. También la URL de conexión, que en el caso de H2 puede ser algo como jdbc:h2:mem:test para una base de datos en memoria. Además, indicamos el usuario y la contraseña, que en H2 suelen ser SA y vacío respectivamente.

Luego, hay propiedades específicas de Hibernate que comienzan con hibernate.. Una de ellas es hibernate.dialect, que le indica a Hibernate qué dialecto SQL debe usar para comunicarse correctamente con la base de datos. Por ejemplo, para H2 se usa org.hibernate.dialect.H2Dialect. Esto es importante porque aunque SQL es un estándar, cada base de datos tiene sus particularidades.

Otra propiedad clave es hibernate.hbm2ddl.auto, que controla cómo Hibernate gestiona el esquema de la base de datos. Podemos usar valores como create, que crea las tablas desde cero cada vez que arrancamos la aplicación; create-drop, que además elimina las tablas cuando la aplicación termina; update, que actualiza el esquema sin borrar datos; o validate, que solo verifica que el esquema coincide con las entidades sin hacer cambios. Para bases de datos en memoria como H2, create-drop es muy útil porque nos asegura que todo se crea limpio al inicio y se elimina al cerrar.

Un ejemplo básico del contenido del archivo persistence.xml para una base de datos H2 en memoria podría ser el siguiente:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
  <persistence-unit name="Persistencia">
    <!-- Aquí se listarán las clases de entidad -->
    <properties>
      <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test"/>
      <property name="javax.persistence.jdbc.user" value="SA"/>
      <property name="javax.persistence.jdbc.password" value=""/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    </properties>
  </persistence-unit>
</persistence>

Con esta configuración, Hibernate sabrá cómo conectarse a la base de datos y cómo gestionar el ciclo de vida de las tablas según nuestras necesidades. Es fundamental recordar que si no configuramos correctamente este archivo, Hibernate no funcionará y nuestra aplicación no podrá persistir datos.

Una vez que tenemos el persistence.xml listo y ubicado en el lugar correcto, estaremos preparados para empezar a definir nuestras entidades y trabajar con el Entity Manager para realizar operaciones de persistencia. Este es el siguiente paso para construir aplicaciones Java robustas y eficientes que interactúen con bases de datos de forma sencilla y automática.

Lista de reproducción
  1. 1
    La persistencia es clave
    6 minutos
  2. 2
    Instalando Hibernate
    8 minutos
  3. 3
    Crear el persistence.xml
    9 minutos
  4. 4
    Construyendo una Entity
    8 minutos
  5. 5
    Accediendo al EntityManager
    9 minutos
  6. 6
    Insertando con persist
    7 minutos
  7. 7
    Managed Entities
    6 minutos
  8. 8
    Merge y remove
    5 minutos
  9. 9
    Inciso sobre Java 8
    7 minutos
  10. 10
    Introducción a relaciones
    6 minutos
  11. 11
    Relación OneToOne
    11 minutos
  12. 12
    OneToOne inverso con mappedBy
    8 minutos
  13. 13
    OneToMany: planteamiento
    6 minutos
  14. 14
    OneToMany: anotaciones
    6 minutos
  15. 15
    OneToMany: EntityManager
    7 minutos
  16. 16
    ¡AYUDA! Error Lazy Initialization (OneToMany)
    5 minutos
  17. 17
    ¡AYUDA! No se fijan las relaciones (OneToMany)
    8 minutos
  18. 18
    Borrar hijos en un OneToMany
    11 minutos
  19. 19
    ON DELETE SET NULL
    8 minutos