悲观锁和乐观锁:处理的是同一张表的同一行记录

悲观锁

如果使用了(加了一个行锁),如果事务没有被释放,就会造成其他事务处于等待。

使用数据库提供的锁机制实现悲观锁。

如果数据库不支持设置的锁机制,JPA会使用该数据库提供的合适的锁机制来完成,而不会报错。

使用entityManage.find(class,id,LockModeType);加悲观锁,相当于发送SELECT … FOR UPDATE

使用entityManage.lock(object,LockModeType);加悲观锁,相当于发送SELECT id FROM … FOR UPDATE

乐观锁(性能好)

添加一个私有字段version,不由程序员维护,由JPA自己维护

1
2
@Version
private long version;