锁:为了保证数据的排他性。
悲观锁:在整个数据处理过程中,数据处于锁定状态。通过数据库的锁机制实现。select * from account where name=”Erica”for update这条 sql 语句锁定了 account表中所有符合检索条件( name=”Erica”)的记录。本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受
乐观锁:通过版本字段来实现控制。数据更新时如果版本字段大于当前版本进行更新,否则视为过期数据。Hibernate 中可以通过 class 描述符的optimistic-lock来开启乐观锁