我有在分布式环境中运行的应用程序。 我希望有一个场景,如果有两个同时请求来我更新表。如果第一个请求成功更新了表,则下一个请求不应该被执行/丢弃一些消息。因此用户必须再次加载更新的数据并再次执行更新操作。 的溶液 我发现一个常见的解决方案是版本控制,方法是在表中添加一个键作为版本,并在每次更新表时进行比较。
我正在寻找其他解决方案,因为Hibernate是健壮的框架,还有其他方法可以实现这个解决方案。
通过阅读JBoss的文章,有一种称为事务API的东西,通过它我们也可以实现但不清楚如何实现解决方案。
答案 0 :(得分:2)
Hibernate可以使用乐观和悲观锁定,如official documentation, Chapter 5. Locking中所述。
如果您的数据库实体没有争用,那么使用@Version
列进行优化锁定似乎是正确的方法。如果您需要悲观锁定,请检查LockMode
类。另一种选择是使用SELECT FOR UPDATE
语句,如果它在您的数据库中可用。然而,由于在引擎盖下发生的额外数据库操作,所有悲观锁定方法通常比简单的乐观锁定解决方案更昂贵。