2

我不确定这个用例是否存在特殊的东西——但感觉就像有人可能已经做出了某种有用的结构/技术/设计模式的情况。

我的情况

  • 我有一组从中间层(Java)执行的 SQL 命令,通过来自相关临时表的连接将数据插入/更新/删除到一组非常大的表中的任何一个。

  • 我有更多的 SQL 命令可以根据临时表/实际表内容更新各种派生表。不同的表将通过不同的查询与不同的派生表交互(像往常一样)。根据用例,这些命令可能必须与第一组交错 - 所以,我不一定要同时执行 set 1 然后 set 2 。

我的问题

所以,我需要构建一个顺序执行的命令链,如果其中任何一个失败,我需要触发回滚。我想以最清晰、有记录的方式做到这一点。

有谁知道这种编码的标准方法?我敢肯定,任何从存储过程代码迁移到中间层代码的人以前都这样做过,如果有好的选择,我不想重新发明轮子。


附加信息

我的主要担忧之一是让一切变得清晰。为了详细说明,我将有一组专门用于:

  • 截断临时表 A' 并使用针对删除记录的主键填充它
  • 根据与 A' 的连接从实际表 A 中删除
  • 截断登台表 A' 并用完整数据填充它以进行更新插入
  • 根据连接将记录从 A' 更新/插入到 A

相同的逻辑将适用于表 B、C、D 等。不幸的是,可能只有 A 和 C 需要额外的步骤,例如将删除同步到某个派生表,在删除之后但在删除之前完成更新。

我显然想对更新表的所有逻辑进行分组,我也想对更新派生表的所有逻辑进行分组,但在执行时它们必须智能交错,这对我来说听起来很乱。

4

1 回答 1

3

不要自己写这样的东西。这就是JTA的诞生。

您可以使用JPASpring来执行此操作。

将工作单元注释为事务性的,让数据库和 JDBC 处理它。

如果您必须自己做,请遵循面向方面的方法,并使其成为装饰性的“前后”实现。

于 2013-03-19T19:49:05.983 回答