有一个使用 Hibernate 的 Java EE webapp,我无权访问其代码,因此我无法修改或查看它。我只能访问 Oracle 数据库。
我必须根据某些条件创建一个避免插入完成的触发器。这是我现在拥有的 BEFORE INSERT
触发器的相关代码:
...
if var_some_value = :new.another_value
then
RAISE_APPLICATION_ERROR(-12345, 'The insert will not be executed');
end if;
...
这工作正常,但问题是,这将抛出一个错误,该错误将作为 SQLException
或某种其他类型的异常传播到 webapp 服务器端代码,无论如何。
这不好,因为要求之一是 java webapp 不能注意到插入尚未完成,因此 java 代码不应抛出任何异常。
有没有其他方法可以以更“安静”的方式停止插入行?
也许我应该采用另一种策略,例如 AFTER INSERT
触发器,它会在需要时删除刚刚插入的行。我想为此我需要使用一个自治事务,执行插入并提交它,然后在它满足条件时删除。但如果可能的话,我更愿意使用 BEFORE INSERT
方法。
关于如何做到这一点有什么想法吗?谢谢!
最佳答案
可能实现此目的的唯一方法是创建一个 View 并将应用程序插入到该 View 中。然后, View 上的 instead-of 触发器可以处理 View 上的插入语句,并决定是否实际插入到表中。
关于java - 使用触发器停止插入而不将错误传播到服务器端 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35359618/