У меня есть две таблицы в базе данных, A и B. Определены следующим образом:
CREATE TABLE A (
id NUMBER,
Name VARCHAR(100),
CONSTRAINT pk_id PRIMARY KEY (id)
);
CREATE TABLE B (
id NUMBER,
a_id NUMBER,
CONSTRAINT pk_id PRIMARY KEY (id),
CONSTRAINT id_a_id FOREIGN KEY (a_id) REFERENCES a(id)
);
Что я хочу сделать, это использовать JpaRepository обновить регистр "давайте предположим, с id: 5" изтаблица A, когда таблица B имеет регистр с a_id: 5.
. Для этого первое, что я попытался сделать, это попытаться получить сущность из базы данных A, изменить значение Name, удалить старый регистр исохранить новый с изменениями:
@Transactional
void update()
{
List<A> oldARegisterList = a.findById(5);
A oldARegister = oldARegisterList.get(0);
A newRegister = new A(oldARegister);
a.delete(oldARegister);
newRegister.setName("NewName");
a.save(newRegister);
}
Но я получаю ORA-02291: ограничение целостности (id_a_id) нарушено - родительский ключ не найден.
Затем я попытался удалитьрегистр в B, удалите и создайте регистр в A с новым именем и, наконец, снова создайте регистр в B:
@Transactional
void update()
{
List<A> oldARegisterList = a.findById(5);
A oldARegister = oldARegisterList.get(0);
B oldBRegister = oldARegister.getB();
b.delete(oldBRegister);
A newRegister = new A(oldARegister);
a.delete(oldARegister);
newRegister.setName("NewName");
a.save(newRegister);
b.save(oldBRegister);
}
Это не работает эфир, что создает ту же проблему, но если я выполнюсначала вручную удаляется регистр B, затем обновляется регистр A и, наконец, воссоздается регистр B, он работает.
Так что кажется, что если процесс удаления B обновляет A и воссоздает B, происходит втот же трОтвет: процесс не работает.
Как можно сделать это в одной транзакции?
Большое спасибо.