From a71c8bd259456e4469a901cf7b1fc62e6ec67b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Sat, 10 Jan 2026 12:11:29 +0100 Subject: [PATCH] cambios para el uso de getCurrentSession() --- .../aadd/cine/dao/hbnt/ActorDaoHibernate.java | 16 ++++++++-------- .../cine/dao/hbnt/DirectorDaoHibernate.java | 19 ++++++++++--------- .../cine/dao/hbnt/PeliculaDaoHibernate.java | 18 +++++++++--------- .../cine/dao/hbnt/RepartoDaoHibernate.java | 3 ++- .../procesos/ProcesadorPeliculasJSON.java | 10 +++++++--- src/main/resources/hibernate.cfg.xml | 2 +- 6 files changed, 37 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/ActorDaoHibernate.java b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/ActorDaoHibernate.java index 7f5ebbe..333fcec 100644 --- a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/ActorDaoHibernate.java +++ b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/ActorDaoHibernate.java @@ -165,21 +165,21 @@ public class ActorDaoHibernate implements IActorDAO { @Override public Actor obtenerActorPorNombre(String nombre) { Actor actor = null; + String sentenciaHQL = "SELECT a FROM Actor a WHERE a.nombre = :nombre"; - try (Session sesion = GestorSesionesHibernate.getSession();) { - SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Actor.class); - sentenciaConsulta.setParameter("nombre", nombre); - actor = sentenciaConsulta.getSingleResultOrNull(); - } catch (Exception e) { - e.printStackTrace(); - } + Session sesion = GestorSesionesHibernate.getCurrentSession(); + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Actor.class); + sentenciaConsulta.setParameter("nombre", nombre); + actor = sentenciaConsulta.getSingleResultOrNull(); + return actor; } @Override public void actualizarActor(Actor actor) throws Exception { Session sesion = GestorSesionesHibernate.getCurrentSession(); - sesion.merge(actor); + if (!sesion.contains(actor)) + sesion.merge(actor); } @Override diff --git a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/DirectorDaoHibernate.java b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/DirectorDaoHibernate.java index 2ebec6b..c2544a8 100644 --- a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/DirectorDaoHibernate.java +++ b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/DirectorDaoHibernate.java @@ -165,26 +165,27 @@ public class DirectorDaoHibernate implements IDirectorDAO { public Director obtenerDirectorPorNombre(String nombre) { Director director = null; String sentenciaHQL = "SELECT d FROM Director d WHERE d.nombre = :nombre"; - try (Session sesion = GestorSesionesHibernate.getSession();) { - SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Director.class); - sentenciaConsulta.setParameter("nombre", nombre); - director = sentenciaConsulta.getSingleResultOrNull(); - } catch (Exception e) { - e.printStackTrace(); - } + + Session sesion = GestorSesionesHibernate.getCurrentSession(); + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Director.class); + sentenciaConsulta.setParameter("nombre", nombre); + director = sentenciaConsulta.getSingleResultOrNull(); + return director; } @Override public void actualizarDirector(Director director) throws Exception { Session sesion = GestorSesionesHibernate.getCurrentSession(); - sesion.merge(director); + if (!sesion.contains(director)) + sesion.merge(director); + } @Override public void insertarDirector(Director director) throws Exception { Session sesion = GestorSesionesHibernate.getCurrentSession(); - sesion.persist(director); + sesion.persist(director); } } diff --git a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/PeliculaDaoHibernate.java b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/PeliculaDaoHibernate.java index 3f2f8e8..a1fbc84 100644 --- a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/PeliculaDaoHibernate.java +++ b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/PeliculaDaoHibernate.java @@ -188,27 +188,27 @@ public class PeliculaDaoHibernate implements IPeliculaDAO { @Override public Pelicula obtenerPeliculaPorTitulo(String titulo) { Pelicula pelicula = null; + String sentenciaHQL = "SELECT p FROM Pelicula p WHERE p.titulo = :titulo"; - try (Session sesion = GestorSesionesHibernate.getSession();) { - SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Pelicula.class); - sentenciaConsulta.setParameter("titulo", titulo); - pelicula = sentenciaConsulta.getSingleResultOrNull(); - } catch (Exception e) { - e.printStackTrace(); - } + Session sesion = GestorSesionesHibernate.getCurrentSession(); + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Pelicula.class); + sentenciaConsulta.setParameter("titulo", titulo); + pelicula = sentenciaConsulta.getSingleResultOrNull(); + return pelicula; } @Override public void actualizarPelicula(Pelicula pelicula) throws Exception { Session sesion = GestorSesionesHibernate.getCurrentSession(); - sesion.merge(pelicula); + if (!sesion.contains(pelicula)) + sesion.merge(pelicula); } @Override public void insertarPelicula(Pelicula pelicula) throws Exception { Session sesion = GestorSesionesHibernate.getCurrentSession(); - sesion.persist(pelicula); + sesion.persist(pelicula); } } diff --git a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/RepartoDaoHibernate.java b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/RepartoDaoHibernate.java index de6fa05..14c6ab9 100644 --- a/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/RepartoDaoHibernate.java +++ b/src/main/java/org/lapaloma/aadd/cine/dao/hbnt/RepartoDaoHibernate.java @@ -191,7 +191,8 @@ public class RepartoDaoHibernate implements IRepartoDAO { @Override public void actualizarReparto(Reparto reparto) throws Exception { Session sesion = GestorSesionesHibernate.getCurrentSession(); - sesion.merge(reparto); + if (!sesion.contains(reparto)) + sesion.merge(reparto); } } diff --git a/src/main/java/org/lapaloma/aadd/cine/procesos/ProcesadorPeliculasJSON.java b/src/main/java/org/lapaloma/aadd/cine/procesos/ProcesadorPeliculasJSON.java index df213e2..54735bb 100644 --- a/src/main/java/org/lapaloma/aadd/cine/procesos/ProcesadorPeliculasJSON.java +++ b/src/main/java/org/lapaloma/aadd/cine/procesos/ProcesadorPeliculasJSON.java @@ -56,7 +56,7 @@ public class ProcesadorPeliculasJSON { Transaction transaccion = null; // Usamos getCurrentSession para que todos los DAO usen la misma sesión y // transacción - try (Session sesion = GestorSesionesHibernate.getSession()) { + try (Session sesion = GestorSesionesHibernate.getCurrentSession()) { // Iniciar transacción transaccion = sesion.beginTransaction(); @@ -76,20 +76,24 @@ public class ProcesadorPeliculasJSON { String idioma = nodoPelicula.get("idioma").asString(); boolean color = nodoPelicula.get("color").asBoolean(); + int anyo = nodoPelicula.get("anyo").asInt(); + // Si la película no existe se crea nueva, si no se actualiza if (pelicula == null) { pelicula = new Pelicula(); pelicula.setTitulo(titulo); + pelicula.setAnyo(anyo); pelicula.setPaisLocalizacion(paisLocalizacion); pelicula.setDirector(director); pelicula.setIdioma(idioma); pelicula.setColor(color); - pelicula.setObservacion(observacionJSON); + pelicula.setObservacion(observacionJSON.substring(0, 50)); // Limitar a 50 caracteres (de la BBDD) peliculaDAO.insertarPelicula(pelicula); } else { pelicula.setTitulo(titulo); + pelicula.setAnyo(anyo); pelicula.setPaisLocalizacion(paisLocalizacion); pelicula.setDirector(director); pelicula.setIdioma(idioma); @@ -112,7 +116,7 @@ public class ProcesadorPeliculasJSON { // Confirmar transacción transaccion.commit(); - System.out.println("Procesada con éxito la película: " + titulo); + System.out.println("Se ha procesado con éxito la película: " + titulo); } catch (Exception e) { if (transaccion != null && transaccion.isActive()) { transaccion.rollback(); diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index 71bbc17..fcf3782 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -17,7 +17,7 @@ false flase - + thread