乐观锁
讨论前提
-
一旦实体对象具备乐观锁,Jimmer就会放弃数据库本身的upsert能力,通过select查询判断后续操作应该是
insert还是update, 并告诉用户查询原因是QueryReason.OPTIMISTIC_LOCK。所以,对于本文而言,讨论upsert场景毫无意义,为了简化文档,本文例子一律展示update行为。
-
无论被保存的对象是聚合根还是深层次的关联对象,乐观锁的处理逻辑是完全一样的。
因此,为了简化文档,本文只讨论保存简单对象,而非复杂的数据结构。
Jimmer的乐观锁分为三种
-
内置乐观锁
-
自定义乐观锁
-
复合乐观锁
即,同时使用内置乐观锁和自定义乐观锁