Curso de Hibernate | Métodos de la clase Session 1

Curso de Hibernate
Métodos de la clase Session

Curso de Hibernate | Métodos de la clase Session 2

Transacciones

Cualquier código que modifique la base de datos (alta, baja y modificación) debería ir anidado en una transacción para surtir efecto.

Transaction tx = null;
try (Session session = sessionFactory.openSession()) {
    tx = session.beginTransaction();

    // Lógica de persistencia
    // session.save(objeto);

    tx.commit(); // Confirma si todo fue bien
} catch (Exception e) {
    if (tx != null) {
        tx.rollback(); // Revierte cambios si hubo error
    }
    e.printStackTrace();
}

Además en el ejemplo anterior hemos añadido un rollback, ya que hasta que no hagas commit() o rollback(), la transacción sigue activa y la base de datos puede estar bloqueando filas o recursos. Si simplemente cierras la sesión sin hacer rollback, la transacción se cerrará porque expire o porque el driver JDBC fuerce su cierre. Ninguna de las dos opciones es recomendable.

Algunos métodos de la clase session

session.save(persona) // guarda un objeto como registro en la base de datos.
session.refresh(persona) // en nos permitirá conocer la id del objeto insertado, suponiendo que la id sea autoincrementada.
session.update(persona);
session.saveOrUpdate(persona);
session.get(Persona.class, id) // me permite recuperar datos.
// el método load lo usamos sólo para borrar un paciente. ya que nos devuelve un paciente sólo con la clave primaria seteada. Para recuperar todos los valores usaremos get.
Persona personaABorrar = session.load(Persona.class, idPaciente);
session.delete(personaABorrar);

Insertar un Autor y un Libro

Cuando queremos salvar un objeto y sus relacionados ( un autor y sus libros en este caso), debemos salvar siempre el objeto del one to many.

Vamos a ver tres formas de hacerlo:

Añadir un libro existente a un autor existente

Esta sería la forma más sencilla, en la que añadimos un author al book.

Book book = session.get(Book.class, 1);
Author author = session.get(Author.class, 1);
session.update(book);

Añadir un nuevo libro a un nuevo autor

Author author = new Author();
author.setName("Juan");
session.save(author);
session.refresh(author);
Book book = new Book(author, "Como ser millionario");
session.save(book);

Salvando el autor en lugar de sus libros

Esta forma es un poco más elaborada. Aquí añadimos un libro al autor en lugar de un autor al libro.

Author author = session.get(Author.class, 3);
List<Book> books= autor.getBooks();
books.add( new Book(author, "Chipirones Gallegos"));
session.update(author);