Как я могу автоматически удалить другую строку из объединяемой таблицы при удалении строки? - PullRequest
0 голосов
/ 09 декабря 2018

Я моделирую взаимосвязь между одной или несколькими строками в таблице Document с помощью простой таблицы соединений RelatedDocuments:

-----------
|from| to |
-----------
|   1|   2|
|   1|   5|
|   7|   1|
-----------

Однако, поскольку эти отношения по существу двунаправлены для моего варианта использования(и, учитывая это, для простоты доступа через JPA) я добавил триггер, который «зеркально отображает» каждое отношение между from и two при вставке.

-----------
|from| to |
-----------
|   1|   2|
|   2|   1|
|   1|   5|
|   5|   1|
|   7|   1|
|   1|   7|
-----------

Это позволяет мне легко найти все Document sсвязанные, например, с идентификатором 1. Однако я не могу реализовать соответствующий триггер удаления («удалить противоположное тому, что вы только что удалили») из-за

ORA-04091: table RELATEDDOCUMENTS is mutating, trigger/function may not see it

, указывающего, совершенно правильно, что я 'Я пытаюсь манипулировать таблицей, которая сработала триггером.Есть ли хороший способ обойти это?Особенно для меня, желающего использовать простую JPA?

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете делать такие вещи в составном триггере , но я думаю, что лучший способ сделать это - просто настроить оператор удаления.Если вы хотите удалить отношение (1,2), вы должны сделать:

delete from relateddocuments
  where ( from = 1 and to = 2 )
     or ( from = 2 and to = 1 );

Вот где действительно помогает написание хранимых процедур для обработки вашего SQL.

...