Frage

Problem gelöst: Danke Jungs, siehe meine Antwort unten

.

Ich habe eine Website in Tomcat 5.5 ausgeführt zu einer MySQL5 Datenbank mit Hibernate3 angeschlossen.

Ein Datensatz einfach weigert, irgendwelche Änderungen an ihm vorgenommen zu halten. Wenn ich den Rekord programmatisch ändern, kehren die Werte zurück, was sie vorher waren.

Wenn ich manuell den Datensatz in der Datenbank ändern, werden die Werte zurückgesetzt (scheinbar einmal die Webapp greift sie).

Ich habe zu stoppen Tomcat versucht und Ändern der Werte manuell dann starten Tomcat wieder. Überprüfen der Datenbank bleiben die Werte geändert, nachdem Tomcat die Webapp hat begonnen, aber kehrt wieder zurück, sobald ich die Seite zu laden.

Ich habe auch versucht, die Tomcat-Arbeitsordner für die Webapp zu löschen und die SER-Cache-Datei.

Ich habe überprüft auch den Code für die Werte, die rückgängig gemacht werden, und kann sie nicht finden.

Ich habe nur bemerkt, es auf diesem einem bestimmten Datensatz.

Edit: Ich habe gerade einen Blick auf die SQL-Ausgabe von Hibernate mit hibernate.show_sql = true. Es gibt eine Update-Abfrage für die Tabelle protokolliert meine Zeile ist. Wer weiß, wie das lösen? für die Spalten zu Istwerten?

War es hilfreich?

Lösung

Sie können vorübergehend die MySQL Query Protokollierung aktivieren und genau sehen, was SQL-Anweisung den Wert geändert. Da Sie sagen, es ändert sich sofort, nachdem der Server startet, sollten Sie ziemlich schnell die Aussage, um herauszufinden, der Lage sein.

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

Andere Tipps

Um Ihre Frage zu beantworten:

  

Wer weiß, wie das lösen?   für die Spalten zu Istwerten?

Sie können dies tun, mit p6spy . Anweisungen, wie diese in einem Frühling App einzurichten sind verfügbar hier .

Aber ich denke, es ist ein Fehler in dieser Anleitung, die Datei, die sie zu beziehen, wie p6spy.log Name sollte eigentlich p6spy.properties.

Es ist immer nah an Halloween, so dass Sie diese Art der Sache zu erwarten haben (plus war es nur ein Vollmond), aber ich würde halten für die Täter in der Web-Anwendung suche ... es muss da sein. Ein paar Werte, die ich sofort in der Webapp Quellcode suchen würde:

  • Die ID des Datensatzes geändert werden.
  • Der Wert, der in geschrieben wird der Datensatz.

Viel Glück ... diese können echte Bären zu finden sein!

Das riecht ein wenig wie ein Testfall beim Starten Brennen, die die Zeile zu dem, was ändert es erwartet, dass sie vor dem Test sein.

Fügen Sie einen Trigger BEFORE UPDATE, Reihe ID überprüfen, einen SQL-Fehler erhöhen, wenn es Ihre magische Zeile übereinstimmt. Dann überprüfen Sie die erzeugte Stacktrace, den Code zu Fuß und das Stück finden, das die Zeile aktualisiert.

Vielen Dank an alle für die Hilfe. Alle Vorschläge sehr praktisch war es für das Aufspüren.

Ich habe es geschafft, herauszufinden, was es verursacht wurde. Bad Datenbank-Design, mehr Datenmodelle und Hibernate machen für einige bösen Sachen. Eine weitere Tabelle hatte den Wert gespeichert und diese Klasse wurde eine Basisklasse mit dem gleichen Wert erstreckt.

Zeit zu betrachten einige Normalisierung zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top