[英]How can I automatically delete another row from a join table when I delete a row?
我正在通过直接连接表RelatedDocuments
对表Document
中的一个或多个行之间的关系进行建模:
-----------
|from| to |
-----------
| 1| 2|
| 1| 5|
| 7| 1|
-----------
但是,由于这些关系对于我的用例而言基本上是双向的(并且,为了便于通过JPA访问),我添加了一个触发器,该触发器在插入时“镜像”源于和两个之间的每个关系。
-----------
|from| to |
-----------
| 1| 2|
| 2| 1|
| 1| 5|
| 5| 1|
| 7| 1|
| 1| 7|
-----------
这使我可以轻松找到与ID 1相关的所有Document
。但是,由于存在以下原因,我无法实现相应的删除触发器(“删除与您刚刚删除的内容相反的内容”)
ORA-04091: table RELATEDDOCUMENTS is mutating, trigger/function may not see it
,非常正确地表明我正在尝试操纵触发触发器的表。 有没有解决这个问题的好方法? 特别是wrp /对我来说想利用普通的JPA?
您可以在复合触发器中执行这种操作,但是我认为最好的方法是调整delete语句。 如果要删除(1,2)关系,请执行以下操作:
delete from relateddocuments
where ( from = 1 and to = 2 )
or ( from = 2 and to = 1 );
这是编写存储过程来处理SQL的真正帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.