我在程序中加入乐观锁后,自动填充的更新时间失效了。如果更新时间初始为null,就会有自动填充。但是当数据中更新时间原先就有值的话,自动填充就是失效。这是为什么??? 我用的mybatis-plus版本是3.4.2
测试程序:
@Test public void testOptimisticLocker(){ User user = userMapper.selectById(4L); user.setName("Lily"); user.setEmail("12222222@qq.com"); userMapper.updateById(user); }
乐观锁组件:
// 注册乐观锁插件 @Bean public MybatisPlusInterceptor MybatisPlusInterceptor() { MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mybatisPlusInterceptor; }
填充策略:
// 更新时的填充策略 @Override public void updateFill(MetaObject metaObject) { log.info("start update fill....."); //this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); this.strictUpdateFill(metaObject,"updateTime",Date.class,new Date()); }
这根乐观锁没有关系吧,应该是你需要修改的字段本身有值,严格模式,有值的字段是不进行填充修改的,自己实现strictFillStrategy接口。
官网文档上说了如果有值是不进行自动填充的,目前我的做法是抽一个工具类在每次更新之前把插入和更新时间设置为null 如果有更好的方法欢迎指出。