我正在开发一个仓库管理系统,使用 JPA 2.0 - EclipseLink,我遇到了实现并发事务的需要,目前我正在实现时间戳差异来验证上次更改数量的时间:添加、删除、转入。
这个策略似乎有点缺陷,需要大量的手动验证,这可能会产生错误,JPA 框架是否提供了替代方法来执行此操作?
最佳答案
据我了解,您正在尝试使用时间戳实现乐观锁定策略。
JPA 在版本字段的帮助下提供了开箱即用的乐观锁定机制。基本上,您的实体中有一个递增的版本字段(short
、int
、long
或 Timestamp
)/设置实体的每次修改。
如果实体在保存时的版本与加载时的版本不同,则会抛出 OptimisticLockingException ,这意味着另一个用户/线程在其间修改了该实体。您可以捕获此异常并决定做什么:
- 告诉第二个保存的用户重新开始修改
- 合并修改(如果可能)
- 覆盖
这取决于用例。
另请参阅:oracle javaee 6 tutorial on optimistic locking
关于java - JPA并发事务策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12330343/