我的oracle数据库中有两个表
请求和批准人。每个审批人都有请求。受约束保护的外键。
在我使用kodo jdo 3.4的java代码中,我在部分或全部批准者上调用delete persistant。 然后在最后如果没有批准者,我在请求上调用delete persistant。当我提交时,我的完整性约束会触发,因为我猜错了sql以错误的顺序运行。
有没有办法强制对db进行删除调用以某种方式发生?
我还在考虑在一切都被删除并以正确的顺序强制删除的情况下自己回滚事务。但这似乎是一种黑客攻击。
由于
答案 0 :(得分:0)
我认为问题是因为您要删除事务中的Approver
,并删除另一个中的Request
。尝试提交您删除Approver
s。
您可能要做的第二件事是ALTER
Request
表定义并使用ON DELETE CASCADE
定义它,然后您不需要自己完成所有操作。不确定是否有某些要求阻止你这样做。
答案 1 :(得分:0)
JDO是否管理关系(例如,Request是否具有Set字段并指定JDO“mapped-by”属性),或者您是否明确设置了外键?如果JDO知道这种关系,它应该按照正确的顺序进行删除。
或者,如果不能选择更改JDO配置,则可以在删除批准者后尝试调用PersistenceManager的flush()方法。这应该应用于数据存储区的任何未完成的删除(尽管仍在事务中)。