Pregunta

Problema resuelto: Gracias, vea mi respuesta a continuación.

Tengo un sitio web que se ejecuta en Tomcat 5.5 conectado a una base de datos MySQL5 mediante Hibernate3.

Un registro simplemente se niega a mantener los cambios realizados en él. Si cambio el registro programáticamente, los valores vuelven a ser lo que eran anteriormente.

Si modifico manualmente el registro en la base de datos, los valores se revertirán (aparentemente una vez que la aplicación web acceda a ellos).

He intentado detener Tomcat y cambiar los valores manualmente y luego iniciar Tomcat nuevamente. Al revisar la base de datos, los valores permanecen cambiados después de que Tomcat haya iniciado la aplicación web, pero volverá a aparecer una vez que cargue el sitio.

También he intentado eliminar la carpeta de trabajo de Tomcat para la aplicación web y el archivo de caché .ser.

También he revisado el código para los valores a los que se están revertiendo y no puedo encontrarlos.

Solo lo he notado en este registro en particular.

Editar: Acabo de echar un vistazo a la salida SQL de Hibernate usando hibernate.show_sql = true. Hay una consulta de actualización registrada para la tabla en la que está mi fila. ¿Alguien sabe cómo resolver el problema? para las columnas a los valores reales?

¿Fue útil?

Solución

Podría habilitar temporalmente el registro de consultas de mysql y ver exactamente qué declaración de SQL modificó el valor. Como dice que cambia inmediatamente después de que se inicie el servidor, debería poder descifrar la declaración con bastante rapidez.

http://dev.mysql.com/doc /refman/5.0/en/query-log.html

Otros consejos

Para responder a su pregunta:

  

¿Alguien sabe cómo resolver el?   para las columnas a los valores reales?

Puede hacer esto con p6spy . Las instrucciones para configurar esto en una aplicación Spring están disponibles aquí .

Sin embargo, creo que hay un error en estas instrucciones, el archivo al que se refieren como p6spy.log debería tener el nombre de p6spy.properties.

Se está acercando al halloween, así que debes esperar este tipo de cosas (además de que solo fue una luna llena), pero seguiría buscando al culpable en la aplicación web ... TIENE QUE estar allí. Un par de valores que buscaría inmediatamente en el código fuente de la aplicación web:

  • La identificación del registro que se está cambiando.
  • El valor que se está escribiendo en el registro.

Buena suerte ... ¡estos pueden ser osos reales para encontrar!

Esto huele un poco como una activación de caso de prueba en el inicio que modifica la fila a lo que espera que sea antes de la prueba.

Agregue un disparador ANTES DE ACTUALIZAR, verifique la identificación de la fila, genere un error de SQL si coincide con su fila mágica. Luego, compruebe el seguimiento de pila generado, recorra el código y localice la pieza que actualiza la fila.

Gracias a todos por la ayuda. Todas las sugerencias fueron útiles para rastrearlas.

Me las arreglé para averiguar qué lo estaba causando. El mal diseño de la base de datos, los modelos de datos múltiples y Hibernate hacen que para algunas cosas repugnantes Otra tabla tenía el valor almacenado y esa clase estaba extendiendo una clase base con el mismo valor.

Es hora de mirar a hacer algo de normalización.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top