consultas con hibernate no veo cambios desde la bd

Hola como estan, mi duda es la siguente, tengo una aplicacion funcionando con hibernate, la cual funciona correctamente a excepcion de que cuando actualizo un registro desde el manejador de base de datos y no desde el aplicativo, este no se refleja a la hora de consultarlo desde el mismo, lo que hago es lo siguiente: abro una session hacia hibernate desde el comienzo cuando el usuario se logea, esta session es la misma para todas las transacciones, cuando actualizo un registro desde el aplicativo este cambio si se refleja a la hora de volver a consultar, pero si lo hago desde la bd directamente este no se refleja, he leido que es mas aconsejable abrir y cerrar una session para cada operacion que vaya a realiazar, pero el problema que tengo con esto es que se demora bastante abriendo la session, no se si eso sea normal, lo que hago es lo siguente en el dao:

try {
Query query = session.createQuery("from " + clazz.getName());
objects = query.list();
} catch (HibernateException e) {
handleException(e);
}
return objects;

esta session es creada desde el controlador de logeo algo asi:
Session sesion1 = HibernateUtil.getSessionFactory().openSession();

el hibernateUtil luce de la siguiente manera:
public class HibernateUtil {
private static final SessionFactory sessionFactory;

static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

mi duda es se que hibernate consulta esto de la session que el mantiene entonces deberia abrir una cada vez que hago una
consulta para que tome los cambios hechos en bd? y de ser asi como puedo hacer para que no tarde tanto cada vez que hace un
opensesion()?

Muchas gracias por su atencion, espero que alguien me pueda ayudar.

rasilvap.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de The man

Aplica singleton

Mas o menos a lo que entendi,lo que tienes problemas con las sesiones, yo lo que haria seria aplicar el patron de singleton,primero creo una clase en esta creo un metodo que seria obtener sesion, seguidamente aplico el patron en esta clase.

Con esto lo que logro es crear la clase solo una vez durante el ciclo de vida de la aplicación, entoces siempre que necesito el metodo de abrir sesion instancion y llamo el metodo de abrir session te escribiria el codigo pero en wikipedia hay ejemplos de este patron

Saludos !! espero que te vaya bien,ha recomendación investiga JPA también aplica ORM y no tienes que aplicar archivos xml para lograr la persistencia de las clases.

He aqui los ejemplos

La explicacion de la teoria con wikipedia
http://es.wikipedia.org/wiki/Singleton

Una discucion que tuvimos en este foro sobre el uso de singleton

http://www.javamexico.org/foros/comunidad_javamexico_2_0/anuncio_se_busc...

Imagen de rasilvap

hola the man

Muchas gracias por tu respuesta, espero explicarme un poco mejor:

Lo que pasa es que cuando ejecuto mi aplicación y pongo la dirección en el navegador de mi jsp me genera la tabla correctamente y con todo el contenido que hasta este momento esta en la tabla de la BD, hasta este punto todo funciona bien, pero en teoria se supone que si agrego un nuevo registro (desde my sql maestro) a la tabla en la BD, solo con hacer un refresh a la pagina ese registro debe de mostrarse tambien ahi, y esto es lo que no hace.

Pero si cierro el navegador y vuelvo a hacer "run o server" desde eclipse, esta vez ya me muestra el nuevo dato agregado, y si vuelvo a agregar otro y actualizar espero que lo muestre pero no, lo muestra hasta que vuelvo a "correr todo el proyecto",... o sea no carga los cambios que se hacen desde el motor directamente, solo los que se hacen desde el aplicativo mediante hibernate.

Agradezco de antemano cualquier ayuda.