//just reassociate
session.lock(obj, LockMode.NONE);
//do a version check, then reassociate
session.lock(obj, LockMode.READ);
//do a version check, using SELECT ... FOR UPDATE, then reassociate
session.lock(obj, LockMode.UPGRADE);
session.lock(obj, LockMode.NONE);
//do a version check, then reassociate
session.lock(obj, LockMode.READ);
//do a version check, using SELECT ... FOR UPDATE, then reassociate
session.lock(obj, LockMode.UPGRADE);
理解如下:
对于LockMode.NONE,只进行绑定,如果obj对象库中无对应数据,也不报异常
对于LockMode.READ,先检查版本,用于用version实现乐观锁的情况,如果加锁时version旧了,则抛出异常,这种加锁的目的除了绑定,还有判断cache中数据是最新的数据,如果obj对象库中无对应数据,也报异常
对于LockMode.UPGRADE,也做版本检查,同时用for update对表中记录加锁,也就是说加锁的目的是为了独占式修改,如果obj对象库中无对应数据,也报异常