suspension salir quitar modo laptop hibernar hibernando hibernación hibernacion desactivar cómo como hibernate hibernate-4.x

hibernate - salir - hibernar windows 10 cmd



¿Qué significa el aviso de Hibernación HHH000387? (5)

¿Configuró el conjunto de conexiones? Tengo la misma advertencia. Pero si agregué c3p0 en mi dependencia de Maven y lo configuré correctamente en hibernate.cfg.xml. La advertencia desaparece.

Acabo de actualizar a Hibernate 4.0 y estoy viendo el mensaje de advertencia:

HHH000387: ResultSet''s statement was not registered

en mis archivos de registro. ¿Qué significa esto, y debo estar preocupado?


En cuanto a la fuente de la clase JdbcResourceRegistryImpl que JdbcResourceRegistryImpl este error, personalmente creo que tenerlo al nivel WARN es excesivo; debe ser INFO a lo sumo, a menos que haya una manera de registrar todas las Statement implícitamente como parte de una configuración de Hibernate / framework.

No me queda claro por qué se debe registrar una Statement , pero si solo es una preocupación del funcionamiento interno de Hibernate, entonces los usuarios de la API suelen advertir que es un error, ¿no?


En mi caso, esta advertencia fue un indicador de una gran pérdida de rendimiento. He hibernado objetos POJO con el mapeo de @oneToOne. Para una tabla funciona bien y no hay advertencias: envía una solicitud al servidor MySQl para obtener todos los registros y luego una solicitud para cada tabla combinada. Para POJO, donde recibo este error (cuando no se encontró @oneToOne): envía una solicitud inicial para obtener una lista de todos los objetos y luego cada vez envía nuevas y nuevas solicitudes de tablas asignadas para cada registro.

Entonces, digamos que tengo 2000 registros en mi base de datos de prueba. Y 3 @oneToOne tablas mapeadas.

En un buen caso, envía 1 solicitud para obtener una lista y 3 solicitudes para obtener tablas asignadas.

En el caso de una advertencia, envía 1 solicitud inicial para obtener la lista. Luego, envíe 3 solicitudes para obtener información mapeada para cada uno de los 2000 registros en DB. Así que 1999 * 3 = 5997 solicitudes adicionales para cada usuario para cada llamada al @Controller (Spring MVC).

No lo había notado mientras la aplicación web y el servidor MySQL estaban en el mismo servidor.


Este mensaje de registro es una señal de que ResultSet.getStatement() no devuelve la Statement que originalmente se le pidió que creara el ResultSet . (También puede indicar una pérdida de memoria). Esto puede suceder cuando se usa un contenedor JDBC, porque hay dos objetos Statement : un wrapper / decorador y el Statement subyacente.

En mi proyecto, tengo mi propio contenedor JDBC para pruebas. getStatement() esta advertencia en mi envoltorio ResultSet asegurándome de que getStatement() devuelve el proxy de la Statement original ( no un nuevo proxy), en lugar de delegar al ResultSet subyacente (que devolvería la Statement subyacente).

Cualquier envoltorio JDBC que esté produciendo advertencias similares probablemente podría usar una solución similar. (Un problema y una solución similares pueden aplicarse al método Statement.getConnection() .

Por cierto, hay un informe de errores para este registro aquí: https://hibernate.atlassian.net/browse/HHH-8210


No me preocuparía demasiado. En cualquier caso, parece que no está en manos de los usuarios de API para evitar este mensaje. El registro se realiza en org.hibernate.engine.jdbc.internal.JdbcResourceRegistryImpl. Según la documentation :

La función principal de un JdbcResourceRegistry es asegurarse de que los recursos se limpian.

Un breve vistazo al código indica que dicho mensaje se registra en dos situaciones:

  1. ResultSet se registra a través del método de registro, y la declaración no se registra.
  2. ResultSet se lanza mediante el método de liberación y la declaración no se registra.