java - JPA并发事务策略

标签 java jakarta-ee jpa concurrency

我正在开发一个仓库管理系统,使用 JPA 2.0 - EclipseLink,我遇到了实现并发事务的需要,目前我正在实现时间戳差异来验证上次更改数量的时间:添加、删除、转入。

这个策略似乎有点缺陷,需要大量的手动验证,这可能会产生错误,JPA 框架是否提供了替代方法来执行此操作?

最佳答案

据我了解,您正在尝试使用时间戳实现乐观锁定策略。

JPA 在版本字段的帮助下提供了开箱即用的乐观锁定机制。基本上,您的实体中有一个递增的版本字段(shortintlongTimestamp)/设置实体的每次修改。

如果实体在保存时的版本与加载时的版本不同,则会抛出 OptimisticLockingException ,这意味着另一个用户/线程在其间修改了该实体。您可以捕获此异常并决定做什么:

  • 告诉第二个保存的用户重新开始修改
  • 合并修改(如果可能)
  • 覆盖

这取决于用例。

另请参阅:oracle javaee 6 tutorial on optimistic locking

关于java - JPA并发事务策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12330343/

相关文章:

Java - 静态方法上的可重入 WriteLock

hibernate 、检测和删除级联顺序

java - 集成 Vaadin 7 和 EJB 的最佳方式或如何制作服务层?

java.lang.OutOfMemory错误: unable to create new native thread while starting wildfly

java - 检查代码中的黑莓模拟器

java - 内部类中的静态方法错误

java - 如何在 JSF 中正确呈现数据库中存储的类别列表

java - Jsp - 访问 pdf - 使用 URL- "save or open"窗口在单击时显示错误

maven - 部署Maven项目抛出java.util.zip.ZipException : invalid LOC header (bad signature)

java - 没有关系实体的 JPA 存储库选择