Curso de Hibernate
Métodos de la clase Session
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);