JPA 事务和触发器/计划作业可能的冲突

Posted

技术标签:

【中文标题】JPA 事务和触发器/计划作业可能的冲突【英文标题】:JPA transactions and triggers/scheduled jobs possible conflicts 【发布时间】:2016-03-27 15:07:27 【问题描述】:

在我们的应用程序中,我们使用 PL/SQL 来维护数据的持久性,我们还大量使用 PL/SQL 存储过程、计划作业和触发器来实现部分应用逻辑。

我的问题是:

如果我担心冲突,请使用 JPA 访问此持久性JPA 事务 可能与在 DB 上定义的上述触发器和计划作业一起使用?

如果你能指点一些在线资料也将非常有帮助 我可以阅读以消除我的疑虑。 谢谢。

【问题讨论】:

【参考方案1】:

你可能有问题。在数据库中实现业务逻辑可能会导致代码重复。但是你最大的问题是数据的完整性和一致性:

    您的应用程序是否使用乐观锁定。如果是,那么 JPA 可能无法看到受尊重实体版本的更改。如果由于 PLSQl 代码发生更改,则不会抛出乐观锁定异常。除非其中也实现了版本控制。 缓存。如果您使用缓存,您最终可能会遇到缓存与数据库状态不一致的情况。例如,您读取实体 A 的状态被缓存,然后 PLSQL 后台程序更新其状态。然后你进行另一次更新并坚持和 Ta 数据......你有问题。然后,我们再次谈到数据的版本化方式。

总的来说,混合 PL/SQL 和 Hibernate 我真的不喜欢它...

【讨论】:

以上是关于JPA 事务和触发器/计划作业可能的冲突的主要内容,如果未能解决你的问题,请参考以下文章

事务日志与备份作业一起传送 = 冲突?

大型机批处理作业触发

Powershell - 手动触发计划作业

JPA 的批量更新触发 TransactionalEventListener?

JPA的批量更新会触发TransactionalEventListener吗?

在Mesos上使用Chronos运行计划任务