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 事务和触发器/计划作业可能的冲突的主要内容,如果未能解决你的问题,请参考以下文章
JPA 的批量更新触发 TransactionalEventListener?