1

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

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

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

データベース内のレコードを手動で変更すると、値が元に戻ります (webapp がそれらにアクセスすると)。

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

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

また、元に戻されて見つからない値のコードを確認しました。

私はこの 1 つの特定のレコードでそれを認識しただけです。

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

4

6 に答える 6

1

あなたの質問に答えるには:

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

これはp6spyで実行できます。Spring アプリでこれを設定する方法については、こちらを参照してください。

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

于 2008-10-16T15:51:46.843 に答える
1

mysql クエリ ログを一時的に有効にして、どの SQL ステートメントが値を変更したかを正確に確認できます。サーバーの起動直後に変更されると言うので、ステートメントをすぐに理解できるはずです。

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

于 2008-10-16T02:33:20.137 に答える
0

ハロウィーンが近づいているので、この種のことを期待する必要があります (さらに、ちょうど満月でした)。webapp のソース コードですぐに検索するいくつかの値:

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

頑張ってください...これらは本物のクマを見つけることができます!

于 2008-10-16T01:45:52.557 に答える
0

これは、テスト前に行を期待どおりに変更する、起動時に実行されるテストケースのようなにおいがします。

于 2008-10-16T01:46:31.090 に答える
0

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

于 2008-10-16T02:19:16.703 に答える
0

助けてくれてありがとう。すべての提案は、それを追跡するのに役立ちました.

何が原因だったのかを突き止めることができました。不適切なデータベース設計、複数のデータ モデル、および Hibernate により、厄介な問題が発生します。別のテーブルには値が格納されており、そのクラスは同じ値で基本クラスを拡張していました。

正規化を検討する時が来ました。

于 2008-10-16T22:09:00.013 に答える