我的JPA实体有以下工作流程
请注意,实体C和D被读取并更新。通过适当的锁定,JPA将在事务结束时发现实体是脏的,并在并发更新/删除的情况下采取适当的操作(回滚)。
但是,实体A和B仅被读取以供参考(无写入)。在事务结束时,它们不会变脏,因此即使使用锁定,JPA也允许通过并发事务更新/删除它们。
总结,如果在我的交易中只读取而非修改的实体有任何并发写入,我希望回滚我的事务。
读取实体上的悲观锁定是否有效?我的真实用例可能有数百个这样的读取实体,而不仅仅是A和B,因此我担心悲观锁定这么多实体会对性能产生影响。
实现这一目标的最有效方法是什么?
注意:我使用OpenJPA作为我的实现,但我的编译时依赖性仅限于javax.persistence
。我宁愿保持这种状态,但如果绝对需要,我愿意改变它。