hibernate sesiones
hola, cada vez que hago en java sessionFactory.getCurrentSession().createQuery("query lo que sea"); consume bastantes recursos, si tengo k hacer un for bastante grande utilizando getCurrentSession se dispara el uso de la cpu, alguién tiene otra forma de hacer consultas?
- Inicie sesión o regístrese para enviar comentarios
Cierras tus sesiones?
Me parece que getCurrentSession() te da una nueva sesión si no existe una. Si ya existe una abierta te devuelve esa. Para estar más seguro, llámalo una sola vez y guarda la referencia a la sesión en una variable, la cual puedes usar después las veces que quieras dentro de tu mismo método (pero no quieras guardar la sesión de manera indefinida en esa variable, eso depende mucho del tipo de aplicación que desarrolles).
Y no olvides cerrar la sesión al final cuando ya no la necesites.
Spring - Hibernate
Revisa también el soporte que Spring ofrece para Hibernate, te simplifica el manejo de sesiones porque las puede abrir y cerrar por ti, de modo que tus métodos ya no se preocupan de tener una sesión abierta y cerrarla al final (porque tienes que cerrarla en un
finally
para que siempre se cierre).Solo necesitas una session
Que tal falcatin
Como dice ezamudio puedes usar spring para wrapear las sessiones de hibernate, ya que tiene algunas clases que te evitan el trabjar directamente con la sessiones y evitar dejar conexiones abiertas por el mal uso de las mismas. Si solo vas a usar Hibernate debes de leer la documentacion en lo referente a las sesiones, ya que solo necesitas usar una sesssion para realizar una bloque de trabajo, y no andar generando sessiones indiscriminadamente
En tu codigo
sessionFactory.getCurrentSession().createQuery("query lo que sea");
solo provocara que generes conexiones a la base de datos y no las estas cerrando
lo correcto deberia ser
Session session = sessionFactory.getCurrentSession();
//manejo de transacciones
//aqui tambien puedes iterar con tu for
Query q = session.createQuery("query lo que sea");
..
try
//ejecutas tu query
catch
//manejo de excepciones
finally
//cierras la session
Tambien te recomiendo le uso del patron DAO que te simplifica el uso de hibernate y el manejos de sesiones, las transacciones las puedes manejar con AOP
Espero que mis comentarios te ayuden de algo.
Saludos