Код: Выделить всё
ERROR: duplicate key value violates unique constraint "lifecycle_event_pkey"
Detail: Key (id)=(2914) already exists.
org.springframework.dao.DataIntegrityViolationException:
could not execute statement; SQL [n/a]; constraint [lifecycle_event_pkey];
nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
< /code>
Это впервые появилось в методе транзакции, обрабатывающего действие по отслеживанию активов. Он использует Spring Data JPA с @transactional Факты ключевых факторов:
- Затронутые объекты все расширяют общий root , который определяет ID поэта Class = "Lang-Java PrettyPrint-Override">
Код: Выделить всё
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - Один и тот же корень класс используется в нескольких модулях/службах
- Нет недавних развертываний или схемы (последнее развертывание было ~ 2 месяца назад)
- nemplaual nemplu Импорт был выполнен
- Идентификатор таблицы в столбце было нет пробелов (was continuous)
Код: Выделить всё
MAX(id) - The error appeared in a method annotated with @Transactional, and occurred during a saveAndFlush() operation
- The issue was resolved by syncing the sequence with:
без @genericgenerator или манипуляция с ручной последовательности
Код: Выделить всё
SELECT setval('lifecycle_event_id_seq', (SELECT MAX(id) FROM lifecycle_event)); < /code> < /li> < /ul> Однако это исправление реактивно. Теперь мы сосредоточены на определении того, что заставило последовательность отставать в первую очередь. Все эти таблицы простираются из одного и того же нанесенного нанесенного на карту суперкласс (Root< /code>), и все полагаются на PostgreSQL, чтобы автоматически генерировать первичные ключи. strategy [*]Sequences were in sync until recently [/list] We've ruled out: Suspected Cause Статус < /th> Примечания < /th> < /tr> < /thead> ручные вставки с explicit id < /code> < /td> не выполнены. /> < /tr> Миграция данных или ETL < /td> Миграция данных не проводилась в пораженных таблицах < /td> < /td> < /tr> hibernate misconfigat Identity
Замечания в таблице
none - ids не были непрерывными /> < /tr>
Дрифт размера распределения (стратегия)Код: Выделить всё
SEQUENCE
не применимо - используя идентификацию стратегия
конфликт общей последовательности
имеет свою собственную последовательность (подтвержден PG_GET_SERIAL_SECENTENT )
Наши лучшие гипоте:
offity < /th>
вероятность < /th>
Notes < /th>
< /tr>
< /thead>
postgresql sequence coster /> возможный
, если кэш >, значения в памяти могут быть потеряны при сбое и не синхронизировать обратно в диск
вставьте откат во время транзакции перед NextVal
/>Especially since the error appeared in a method using @Transactional
Hibernate reused detached entity with existing id
Unlikely
No such logic is present in our service code
Concurrent app using same table with broken ID strategy
Unlikely
No evidence of conflicting ID generators across services
Given that no manual Вставки, миграции или изменения схемы были сделаны, и в данных таблицы не было пробелов, что может привести к неожиданному отстранению последовательности PostgreSQL, особенно при использовании: < /p>Код: Выделить всё
@GeneratedValue(strategy = GenerationType.IDENTITY)- a @mampedsuperclass с помощью table_per_class наследование
- Метод, обернутый в @transactional
Транзакция не выдвигает последовательность?>
Подробнее здесь: https://stackoverflow.com/questions/795 ... ies-no-man