Изменение баз данных для веб-приложения Java / Hibernate - PullRequest
0 голосов
/ 02 сентября 2011

Я недавно переместил веб-приложение на Java (используя hibernate) из CentOS 5.5 в AWS Elastic Beanstalk / RDS.В какой-то момент он начал генерировать исключения:

Sep 1, 2011 6:53:20 PM org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 1062, SQLState: 23000
Sep 1, 2011 6:53:20 PM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: Duplicate entry '318297-69699' for key 'PRIMARY'
Sep 1, 2011 6:53:20 PM org.hibernate.event.def.AbstractFlushingEventListener performExecutions
SEVERE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not insert collection: [com.iengage.objects.business.SlideManagementBO.students#318297]

...

Caused by: java.sql.BatchUpdateException: Duplicate entry '318297-69699' for key 'PRIMARY'

Я понимаю, что означают исключения, мне любопытно почему они запустились, поскольку наше приложение было стабильным на нашем старом сервере (пока мыначал перерастать это).Мои вопросы:

Что я испортил в этом процессе?Как это можно исправить (если можно)?Как я могу предотвратить это снова?

Я знаю, что это три вопроса, но все они связаны с поиском основной причины этой ошибки.Вот что я сделал:

  1. Сброс данных из старой базы данных (используя mysqldump).
  2. Импортированные данные в новую базу данных (./mysql -u dbUser -p -h dbLocation dbName
  3. Загруженный файл .war в beanstalk.Изменения были внесены только в свойства БД (хост, имя, пароль).В этот момент все, казалось, работало хорошо.Журналы выглядели ясно (хотя я не могу сказать, что я сделал исчерпывающий поиск).На данный момент это был все еще тестовый сервер, но все выглядело хорошо, поэтому мы решили переключиться.
  4. Удалили все таблицы в базе данных AWS.
  5. Повторили шаги 1 и 2, чтобы получитьпоследние данные.
  6. Запустил, все выглядело хорошо.Обратите внимание на первую (я заметил, что это) ошибку первичного ключа в журналах два дня спустя - я подумал, что это было интересно, и я должен проверить это позже (сожалею об этом сейчас).
  7. Запустить еще один экземпляр приложения наAWS Эластичный бобовый стебель.Это указывало на ту же базу данных.

Вот где я был, когда начал замечать ошибки.Кажется, они ускоряются, и я думаю о том, чтобы вернуться к старому серверу, но если моя ошибка была в том, как я перенес данные из БД, я не хочу повторять ошибку.

Для справки, вот отображение гибернации для объекта, который выдал вышеуказанную ошибку:

@Entity
@Table(name = "question")
public class Question implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Integer id;

Любые предложения относительно того, почему это сломалось, что я могу сделать, или что я могу сделать, чтобыпредотвратить это снова будет очень приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...