fix(rest-api): saveAndFlush при update record чтобы не падал exclusion constraint
Update bitemporal записи: close old (set valid_to = new valid_from) → insert new. Hibernate batch'ил эти два save() и до commit'а UPDATE не flush'ился. PostgreSQL видел что старая запись имеет valid_to=FAR_FUTURE и tstzrange новой записи пересекался → 23P01 conflicting key value violates exclusion constraint dictionary_records_no_overlap → 500 для пользователя. Заменил repository.save(current) на saveAndFlush(current) — UPDATE летит в БД до INSERT, range'ы становятся [from1, X) и [X, to2) и не пересекаются.
This commit is contained in:
+4
-1
@@ -115,7 +115,10 @@ public class DictionaryRecordService {
|
||||
UUID previousRecordId = current.getId();
|
||||
|
||||
current.setValidTo(newValidFrom);
|
||||
repository.save(current);
|
||||
// saveAndFlush обязателен: иначе Hibernate отложит UPDATE до commit, INSERT новой
|
||||
// записи пойдёт первым → exclusion constraint dictionary_records_no_overlap бьёт,
|
||||
// т.к. старая ещё имеет valid_to=FAR_FUTURE и tstzrange'и пересекаются.
|
||||
repository.saveAndFlush(current);
|
||||
|
||||
var next = new DictionaryRecord(
|
||||
UUID.randomUUID(),
|
||||
|
||||
Reference in New Issue
Block a user