unidades:02_hibernate:04_usando_hibernate
Diferencias
Muestra las diferencias entre dos versiones de la página.
| — | unidades:02_hibernate:04_usando_hibernate [2023/04/07 21:26] (actual) – creado - editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== Usando Hibernate ====== | ||
| + | Hasta ahora hemos visto cómo configurar hibernate usando los ficheros XML de configuración o usando notaciones pero no hemos visto nada de código Java para usarlo realmente. En esta lección veremos finalmente cómo usar Java para persistir una clase. | ||
| + | La clase que más usaremos en Hibernate es <javadoc h41> | ||
| + | |||
| + | <code java> | ||
| + | Session session = sessionFactory.openSession(); | ||
| + | </ | ||
| + | |||
| + | Veamos ahora cómo crear el objeto <javadoc h41> | ||
| + | |||
| + | ===== SesionFactory ===== | ||
| + | La forma de crear el objeto <javadoc h41> | ||
| + | |||
| + | <code java 1 | Listado 1.Creación del objeto SessionFactory> | ||
| + | import org.hibernate.SessionFactory; | ||
| + | import org.hibernate.cfg.Configuration; | ||
| + | import org.hibernate.service.ServiceRegistry; | ||
| + | import org.hibernate.service.ServiceRegistryBuilder; | ||
| + | |||
| + | SessionFactory sessionFactory; | ||
| + | |||
| + | Configuration configuration = new Configuration(); | ||
| + | configuration.configure(); | ||
| + | ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); | ||
| + | sessionFactory = configuration.buildSessionFactory(serviceRegistry); | ||
| + | </ | ||
| + | |||
| + | * En la línea 8 vemos cómo se crea el objeto <javadoc h41> | ||
| + | * En la línea 9 mediante el método <javadoc h41> | ||
| + | * La línea 10 es nueva en hibernate 4 y contiene la lista de los distintos servicios que usará (( Tiene registrados)) hibernate.Para ello se crea un objeto de la clase <javadoc h41> | ||
| + | * La línea 11 es la que finalmente creará el objeto <javadoc h41> | ||
| + | |||
| + | Todo el código anterior deberá realizarse una única vez en la aplicación y deberemos guardar la referencia a <javadoc h41> | ||
| + | |||
| + | <note tip> | ||
| + | Si vemos la [[http:// | ||
| + | |||
| + | <code java 1 | Forma antigua de crear el objeto SessionFactory> | ||
| + | Configuration configuration = new Configuration(); | ||
| + | configuration.configure(); | ||
| + | sessionFactory = configuration.buildSessionFactory(); | ||
| + | </ | ||
| + | |||
| + | Sin embargo al usar este código se puede observar que el método <javadoc h41> | ||
| + | |||
| + | Una discusión sobre el error en la documentación de Hibernate 4 la podéis encontrar en: | ||
| + | |||
| + | </ | ||
| + | |||
| + | Al finalizar la aplicación deberemos llamar al método <javadoc h41> | ||
| + | <code java> | ||
| + | sessionFactory.close(); | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Session ===== | ||
| + | Ahora que ya tenemos el objeto <javadoc h41> | ||
| + | |||
| + | <code java> | ||
| + | Session session = sessionFactory.openSession(); | ||
| + | </ | ||
| + | |||
| + | Una vez obtenida la sesión trabajaremos con Hibernate persistiendo las clases y una vez finalizado se deberá cerrar la sesión con el método <javadoc h41> | ||
| + | |||
| + | <code java> | ||
| + | session.close(); | ||
| + | </ | ||
| + | ===== Transacciones ===== | ||
| + | Para trabajar con una base de datos usamos las transacciones. En hibernate es tan sencillo como: | ||
| + | |||
| + | |||
| + | * Crear una nueva transacción | ||
| + | <code java> | ||
| + | \\ | ||
| + | * Hacer un commit de la transacción actual llamando al método <javadoc h41> | ||
| + | <code java> | ||
| + | \\ | ||
| + | * Hacer un rollback de la transacción actual llamando al método <javadoc h41> | ||
| + | <code java> | ||
| + | |||
| + | ===== CRUD ===== | ||
| + | Ya hemos llegado al punto en que tenemos todo preparado para poder trabajar con Hibernate en las operaciones fundamentales de una base de datos, las operaciones [[wpes> | ||
| + | * **C**reate: Guardar un nuevo objeto en la base de datos. | ||
| + | * **R**ead: | ||
| + | * **U**pdate: | ||
| + | * **D**elete: | ||
| + | |||
| + | Estas 4 operaciones será tan sencillas de usar desde hibernate como llamar a un único método para cada uno de ellos. | ||
| + | ==== Guardar ==== | ||
| + | Usaremos el método <javadoc h41> | ||
| + | |||
| + | <code java> | ||
| + | Profesor profesor=new Profesor(101, | ||
| + | |||
| + | Session session = sessionFactory.openSession(); | ||
| + | session.beginTransaction(); | ||
| + | |||
| + | session.save(profesor); | ||
| + | |||
| + | session.getTransaction().commit(); | ||
| + | session.close(); | ||
| + | </ | ||
| + | |||
| + | Como vemos , guardar una clase Java en la base de datos solo implica usar una única línea. | ||
| + | ==== Leer ==== | ||
| + | El método que debemos usar es <javadoc h41> | ||
| + | |||
| + | <code java> | ||
| + | Profesor profesor=(Profesor)session.get(profesor.class, | ||
| + | </ | ||
| + | |||
| + | El método <javadoc h41> | ||
| + | |||
| + | El uso de este método tiene 2 peculiaridades: | ||
| + | * Uso del cast:Es necesario hacer un cast añadiendo '' | ||
| + | * El uso de la propiedad '' | ||
| + | |||
| + | ==== Actualizar ==== | ||
| + | El método a usar es <javadoc h41> | ||
| + | |||
| + | <code java> | ||
| + | session.beginTransaction(); | ||
| + | |||
| + | session.update(profesor); | ||
| + | |||
| + | session.getTransaction().commit(); | ||
| + | </ | ||
| + | |||
| + | El método <javadoc h41> | ||
| + | |||
| + | ==== Borrar ==== | ||
| + | Ahora pasemos a borrar un objeto desde la base de datos.El método que debemos usar es <javadoc h41> | ||
| + | |||
| + | <code java> | ||
| + | session.beginTransaction(); | ||
| + | |||
| + | session.delete(profesor); | ||
| + | |||
| + | session.getTransaction().commit(); | ||
| + | </ | ||
| + | |||
| + | El método <javadoc h41> | ||
| + | |||
| + | ==== Guardar y actualizar ==== | ||
| + | Muchas veces resulta cómodo al programar no tener que estar pendiente de si un objeto va a insertarse o actualizarse. Para ello Hibernate dispone del método <javadoc h41> | ||
| + | |||
| + | <code java 1> | ||
| + | Profesor profesor=new Profesor(101, | ||
| + | |||
| + | session.beginTransaction(); | ||
| + | |||
| + | session.saveOrUpdate(profesor); | ||
| + | |||
| + | session.getTransaction().commit(); | ||
| + | |||
| + | </ | ||
| + | |||
| + | En este caso dependiendo de si existe o no la fila en la base de datos con '' | ||
| + | ===== Referencias ===== | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||