繁体   English   中英

删除行时,如何自动从联接表中删除另一行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM