乐观锁相关:
update语句一旦执行,在事务还没提交前,是会自动把更新的数据行锁定,其他需要锁定数据行的dml操作(例如:select * for update、update、delete)会被挂起等待,等到该数据行的锁被释放(例如:事务commit、rollback),才能继续执行。
hibernate的乐观锁实现:
实现之一:是通过version字段实现,查询select时候会把version的值取出,然后在update或delete时,会在where条件上加上version = ?(查询时候的值)。
所以hibernate在更新时语句为:
update tbl_name set column = value , ... where id = ? and version = ?