Domanda

Problema risolto: grazie ragazzi, vedere la mia risposta di seguito.

Ho un sito Web in esecuzione in Tomcat 5.5 collegato a un database MySQL5 utilizzando Hibernate3.

Un record semplicemente rifiuta di mantenere le modifiche eseguite su di esso. Se cambio il record a livello di codice, i valori ritornano a quelli che erano in precedenza.

Se modifico manualmente il record nel database, i valori torneranno (apparentemente una volta che la webapp li accede).

Ho provato a fermare Tomcat e modificare i valori manualmente, quindi riavviare Tomcat. Controllando il database, i valori rimangono cambiati dopo che Tomcat ha avviato la webapp ma tornerà indietro una volta caricato il sito.

Ho anche provato a eliminare la cartella di lavoro Tomcat per la webapp e il file cache .ser.

Ho anche controllato il codice per i valori che vengono ripristinati e non riesco a trovarli.

L'ho notato solo in questo particolare disco.

Modifica: ho appena dato un'occhiata all'output SQL di Hibernate usando hibernate.show_sql = true. È stata registrata una query di aggiornamento per la tabella in cui si trova la mia riga. Qualcuno sa come risolvere il problema? per le colonne ai valori effettivi?

È stato utile?

Soluzione

È possibile abilitare temporaneamente la registrazione delle query mysql e vedere esattamente quale istruzione sql ha modificato il valore. Dal momento che dici che cambia immediatamente dopo l'avvio del server, dovresti essere in grado di capire l'affermazione abbastanza rapidamente.

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

Altri suggerimenti

Per rispondere alla tua domanda:

  

Qualcuno sa come risolvere il?   per le colonne ai valori effettivi?

Puoi farlo con p6spy . Sono disponibili istruzioni su come configurarlo in un'app Spring qui .

Tuttavia, penso che ci sia un errore in queste istruzioni, il file che chiamano p6spy.log dovrebbe in realtà essere il nome p6spy.properties.

Si sta avvicinando a Halloween, quindi devi aspettarti questo genere di cose (in più era solo una luna piena), ma continuerei a cercare il colpevole nell'applicazione web ... DEVE essere lì. Un paio di valori che avrei immediatamente cercato nel codice sorgente di webapp:

  • L'ID del record è stato modificato.
  • Il valore in cui si sta scrivendo il record.

Buona fortuna ... questi possono essere veri orsi da trovare!

Questo puzza un po 'come un caso di test che si avvia all'avvio che modifica la riga in quello che si aspetta che sia prima del test.

Aggiungi un trigger PRIMA DELL'AGGIORNAMENTO, controlla l'id riga, genera un errore SQL se corrisponde alla tua riga magica. Quindi controlla lo stacktrace generato, segui il codice e individua il pezzo che aggiorna la riga.

Grazie a tutti per l'aiuto. Tutti i suggerimenti sono stati utili per rintracciarli.

Sono riuscito a scoprire cosa lo stava causando. La cattiva progettazione del database, più modelli di dati e Hibernate rendono alcune cose brutte. Un'altra tabella aveva il valore memorizzato e quella classe stava estendendo una classe base con lo stesso valore.

È ora di guardare a fare un po 'di normalizzazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top