У меня есть такая сущность:
class Parent {
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<ChildUpdatedByBatch> childrenUpdatedByBatch;
@OneToOne(mappedBy = "parent", cascade = CascadeType.ALL)
private Child child;
....
}
У меня есть пакетное задание, которое в конечном итоге сохраняет / обновляет дочернюю сущность ( ChildUpdatedByBatch ), и обычное действие, которое обновляетДочерняя сущность.
Дело в том, что мы используем parentRepository , чтобы обновить обе сущности, поэтому пакетное задание имеет что-то вроде этого:
// updating parent entity by adding/ or updating a ChildUpdatedByBatch
parentRepository.save(parent);
И обычное действиетакже использует:
// updating parent entity by adding/ or updating the Child entity
parentRepository.save(parent);
Но этот второй (обычное действие) вызывает исключение ObjectOptimisticLockingFailureException, потому что
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [<package>.ChildEntityUpdatedByBatch#911].
Мне интересно, решит ли создание репозиториев для дочерних объектовпроблема.Я имею в виду, что-то вроде:
child.save(child) // with child having a reference to out-of-date parent
Или, если это не решит проблему ни.