当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
就是执行更新的操作
重现步骤(如果有就写完整)
从数据库中获取entity,然后给entity更新值,执行更新操作,就报错了。
报错信息
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'MP_OPTLOCK_VERSION_ORIGINAL' not found. Available parameters are [param1, et]
Comment From: miemieYaho
OptLockerTest.testUpdateByIdSuccFromDb 无法复现
Comment From: marquisXuan
复现-。-
Comment From: miemieYaho
你确定你的乐观锁插件生效了?
Comment From: marquisXuan
你确定你的乐观锁插件生效了?
我正要回复呢,给娃换尿布去了。 之所以出现这样的情况,就是乐观锁配置没有生效@wenheng
Comment From: miemieYaho
org.apache.ibatis.plugin.InterceptorChain#pluginAll) debug这个方法,你看看interceptors 里有没有该插件
Comment From: dgyxiaoyu
实际是 optimisticLockerInterceptor 未生效,即使有
/*
* 乐观锁插件
* @return
/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
但是如果你使用了
MybatisPlusConfig.java中
@Bean
public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(DataSource ds, GlobalConfig gc) throws Exception {....
如果缺少这个,也就是自定义了MybatisSqlSessionFactoryBean 需要手动加入这个插件(一般都会要分页插件和手动写MybatisSqlSessionFactoryBean,来识别指定位置的 xml 等)
sessionFactoryBean.setPlugins(paginationInterceptor(),optimisticLockerInterceptor());
实测3.3.2 如果不这么配置,会报org.apache.ibatis.binding.BindingException: Parameter 'MP_OPTLOCK_VERSION_ORIGINAL' not found. Available parameters are [param1, et] 3.2.0 不报错,但不生效,update sql中没有 where version=?