JPA并发交易策略

时间:2012-09-08 11:31:14

标签: java java-ee jpa concurrency

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

这个策略看起来有点瑕疵,并且需要大量的手动验证,可能会产生错误,是否有其他方法可以做到这一点,由JPA框架提供?

1 个答案:

答案 0 :(得分:1)

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

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

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

  • 告诉用户保存第二个以重新启动其修改
  • 合并修改(如果可能)
  • 重写

这取决于用例。

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