假设user_1和user_2在同一时刻访问了id = 101,name = Rahul,accountBalance = 1500的员工。 所以两个用户现在都有员工手中有上述值。 User_1向accountBalance添加了1000并更新了员工。所以他的余额现在在数据库中为2500.
在user_1更新员工后,user_2会立即添加500到帐户余额。 所以500将被添加到员工的帐户余额中,该余额目前在user_2的手中。 所以1500 + 500 = 2000。
但实际上它应该是(1500 + 1000)+500 = 3000。
如何在使用hibernate的java中处理这个问题?
我们是否要在业务方法updateEmployee()中再次检查最新值,然后将金额添加到该新帐户余额?
请帮助我以正确的方式处理这种情况。 谢谢和问候
答案 0 :(得分:2)
您可以通过使用@Version注释的字段启用乐观锁定来实现。在每次更新时,Hibernate将检查数据库中的版本是否与内存中的版本相同,并增加版本。如果版本不匹配,则会抛出异常。
有关the documentation中乐观锁定的更多信息。
答案 1 :(得分:1)
Hibernate的用户版本控制概念。在这种情况下,如果user_2更新相同的记录,hibernate会在更新前检查相同的记录是否已被修改,如果是,则抛出异常。因此,您的应用必须处理该异常并让user_2通知记录中的更改并重新加载记录试。