Я недавно переместил веб-приложение на 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'
Я понимаю, что означают исключения, мне любопытно почему они запустились, поскольку наше приложение было стабильным на нашем старом сервере (пока мыначал перерастать это).Мои вопросы:
Что я испортил в этом процессе?Как это можно исправить (если можно)?Как я могу предотвратить это снова?
Я знаю, что это три вопроса, но все они связаны с поиском основной причины этой ошибки.Вот что я сделал:
- Сброс данных из старой базы данных (используя mysqldump).
- Импортированные данные в новую базу данных (./mysql -u dbUser -p -h dbLocation dbName
- Загруженный файл .war в beanstalk.Изменения были внесены только в свойства БД (хост, имя, пароль).В этот момент все, казалось, работало хорошо.Журналы выглядели ясно (хотя я не могу сказать, что я сделал исчерпывающий поиск).На данный момент это был все еще тестовый сервер, но все выглядело хорошо, поэтому мы решили переключиться.
- Удалили все таблицы в базе данных AWS.
- Повторили шаги 1 и 2, чтобы получитьпоследние данные.
- Запустил, все выглядело хорошо.Обратите внимание на первую (я заметил, что это) ошибку первичного ключа в журналах два дня спустя - я подумал, что это было интересно, и я должен проверить это позже (сожалею об этом сейчас).
- Запустить еще один экземпляр приложения наAWS Эластичный бобовый стебель.Это указывало на ту же базу данных.
Вот где я был, когда начал замечать ошибки.Кажется, они ускоряются, и я думаю о том, чтобы вернуться к старому серверу, но если моя ошибка была в том, как я перенес данные из БД, я не хочу повторять ошибку.
Для справки, вот отображение гибернации для объекта, который выдал вышеуказанную ошибку:
@Entity
@Table(name = "question")
public class Question implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Integer id;
Любые предложения относительно того, почему это сломалось, что я могу сделать, или что я могу сделать, чтобыпредотвратить это снова будет очень приветствуется.