2009-12-11 19 views
7

Si un usuario presiona el botón "buscar" y luego decide hacer "otra cosa", debemos cancelar una consulta que ya está en ejecución.Cómo puedo cancelar una consulta de hibernación

Usamos Hibernate (y Oracle) como solución de persistencia. La interfaz de sesión de Hibernates proporciona un método cancelQuery(). Después de algunas pruebas, parece que cancelQuery() no tiene ningún efecto.

¿Alguien tiene alguna experiencia con este método Session#cancelQuery()?

¡Gracias!

+0

Encontré que el método cancelQuery solo funciona mientras la aplicación está esperando que la base de datos comience a devolver los resultados. Sin embargo, una vez que Hibernate ha recibido un conjunto de resultados de la base de datos y comienza a asignar los resultados a los objetos, ya no tiene ningún efecto, y es aquí donde se encuentra la mayor parte de la sobrecarga del rendimiento. ver: http://stackoverflow.com/questions/28391785/outofmemoryerror-as-a-result-of-multiple-searches – Jewels

Respuesta

6

Tiene un efecto, pero con el controlador JDBC de Oracle, simplemente lleva algo de tiempo que suceda. Solo espera uno o dos minutos.

Si no puede esperar, mueva la cancelación en una secuencia de fondo (junto con la sesión) y solicite una nueva sesión de Hibernate en su hilo principal. No puede usar la sesión anterior hasta que cancelQuery() regrese.

Cuestiones relacionadas