回滚JPA事务以同时更新/删除未修改的实体

时间:2015-05-23 02:02:12

标签: java jpa transactions locking openjpa

我的JPA实体有以下工作流程

  1. 开始交易
  2. 读取实体A,B,C和D
  3. 创建实体E和F
  4. 更新实体C和D
  5. 结束交易
  6. 请注意,实体C和D被读取并更新。通过适当的锁定,JPA将在事务结束时发现实体是脏的,并在并发更新/删除的情况下采取适当的操作(回滚)。

    但是,实体A和B仅被读取以供参考(无写入)。在事务结束时,它们不会变脏,因此即使使用锁定,JPA也允许通过并发事务更新/删除它们。

    总结,如果在我的交易中只读取而非修改的实体有任何并发​​写入,我希望回滚我的事务。

    读取实体上的悲观锁定是否有效?我的真实用例可能有数百个这样的读取实体,而不仅仅是A和B,因此我担心悲观锁定这么多实体会对性能产生影响。

    实现这一目标的最有效方法是什么?

    注意:我使用OpenJPA作为我的实现,但我的编译时依赖性仅限于javax.persistence。我宁愿保持这种状态,但如果绝对需要,我愿意改变它。

0 个答案:

没有答案