Восстановление записи базы данных после изменения вручную

StackOverflow https://stackoverflow.com/questions/207143

Вопрос

Задача решена: Спасибо, ребята, смотрите мой ответ ниже.

У меня есть веб-сайт, работающий в Tomcat 5.5, подключенный к базе данных MySQL5 с помощью Hibernate3.

Одна запись просто отказывается сохранять любые внесенные в нее изменения.Если я изменю запись программно, значения вернутся к прежним значениям.

Если я вручную изменю запись в базе данных, значения вернутся (по-видимому, как только веб-приложение получит к ним доступ).

Я попытался остановить Tomcat и изменить значения вручную, а затем снова запустить Tomcat.При проверке базы данных значения остаются измененными после того, как Tomcat запустил веб-приложение, но снова вернутся, как только я загружу сайт.

Я также попытался удалить рабочую папку Tomcat для веб-приложения и файл кэша .ser.

Я также проверил код значений, к которым возвращаются, и не могу их найти.

Я заметил это только на этой конкретной пластинке.

Редактировать: Я только что посмотрел вывод SQL из Hibernate, используя hibernate.show_sql=true.Для таблицы, в которой находится моя строка, зарегистрирован запрос на обновление.Кто-нибудь знает, как решить проблему?для столбцов к фактическим значениям?

Это было полезно?

Решение

Вы можете временно включить ведение журнала запросов MySQL и посмотреть, какой именно оператор sql изменил значение.Поскольку вы говорите, что оно меняется сразу после запуска сервера, вы сможете довольно быстро разобраться в этом утверждении.

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

Другие советы

Чтобы ответить на ваш вопрос:

Кто-нибудь знает, как решить проблему?для столбцов к фактическим значениям?

Вы можете сделать это с p6spy.Инструкции о том, как настроить это в приложении Spring, доступны. здесь.

Однако я думаю, что в этих инструкциях есть ошибка: файл, который они называют p6spy.log, на самом деле должен называться p6spy.properties.

Близится Хеллоуин, так что такого можно ожидать (к тому же было как раз полнолуние), но я бы продолжал искать виновника в веб-приложении...оно ДОЛЖНО быть там.Несколько значений, которые я бы сразу поискал в исходном коде веб-приложения:

  • Идентификатор изменяемой записи.
  • Ценность, которая записана в запись.

Удачи ...это могут быть настоящие медведи!

Это немного похоже на запуск тестового сценария при запуске, который изменяет строку до ожидаемого состояния перед тестированием.

Добавьте триггер ПЕРЕД ОБНОВЛЕНИЕМ, проверьте идентификатор строки, вызовите ошибку SQL, если она соответствует вашей волшебной строке.Затем проверьте сгенерированную трассировку стека, просмотрите код и найдите фрагмент, который обновляет строку.

Спасибо всем за помощь.Все предложения пригодились для его отслеживания.

Мне удалось выяснить, что стало причиной этого.Плохой дизайн базы данных, несколько моделей данных и Hibernate приводят к неприятным последствиям.В другой таблице хранилось значение, и этот класс расширял базовый класс с тем же значением.

Пришло время задуматься о нормализации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top