質問

問題は解決しました:どうもありがとう。以下の回答をご覧ください。

Hibernate3を使用してMySQL 5.5データベースに接続されたTomcat 5.5で実行されているWebサイトがあります。

1つのレコードは、実行された変更の保持を拒否します。プログラムでレコードを変更すると、値は以前の状態に戻ります。

データベース内のレコードを手動で変更すると、値は元に戻ります(Webアプリケーションがそれらにアクセスすると、どうやら)。

Tomcatを停止し、値を手動で変更してから、Tomcatを再起動しようとしました。データベースを確認すると、Tomcatがwebappを開始した後も値は変更されたままですが、サイトをロードすると元に戻ります。

また、webappのTomcat作業フォルダーと.serキャッシュファイルを削除しようとしました。

また、元に戻される値のコードをチェックしましたが、それらを見つけることができません。

この特定のレコードでのみ気づいた。

編集: hibernate.show_sql = trueを使用して、HibernateからのSQL出力を確認しました。私の行が入っているテーブルの更新クエリが記録されています。誰でも解決方法を知っていますか?列を実際の値にするには?

役に立ちましたか?

解決

mysqlクエリロギングを一時的に有効にして、値が変更されたsqlステートメントを正確に確認できます。サーバーの起動直後に変更すると言うので、文を非常に迅速に把握できるはずです。

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

他のヒント

質問に答えるには:

  

誰でも解決方法を知っていますか?   列を実際の値にするには?

p6spy でこれを行うことができます。 Springアプリでこれを設定する方法については、こちら

ただし、これらの指示には誤りがあると思います。p6spy.logとして参照するファイルは、実際にはp6spy.propertiesという名前にする必要があります。

ハロウィンに近づいてきているので、この種のことを期待する必要があります(さらには満月でした)が、Webアプリケーションの犯人を探し続けます...そこにいる必要があります。 webappソースコードですぐに検索するいくつかの値:

  • 変更されるレコードのID。
  • 書き込まれている値 レコード。

幸運...これらは見つけるのが本当のクマです!

これは、起動時にテストケースが発火するような匂いがし、テスト前に行を予想通りに変更します。

更新前にトリガーを追加し、行IDをチェックし、マジック行と一致する場合はSQLエラーを発生させます。 次に、生成されたスタックトレースを確認し、コードを調べて、行を更新する部分を見つけます。

助けてくれたみんなに感謝します。すべての提案は、追跡に役立ちました。

何が原因であるかを見つけることができました。悪いデータベース設計、複数のデータモデル、およびHibernateは、いくつかの厄介な問題を引き起こします。別のテーブルには値が保存されており、そのクラスは同じ値で基本クラスを拡張していました。

いくつかの正規化を行う時間です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top