MyBatisPlus:can not use this method for "getEntity"
🏷️ MyBatis
使用如下方式删除数据时报了 can not use this method for “getEntity” 的错误。
java
this.remove(this.lambdaQuery().eq(SomeEntity::getCode, code));
异常内容:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.entity != null'. Cause: org.apache.ibatis.ognl.OgnlException: entity [com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not use this method for "getEntity"]
调查后发现是由于 lambdaQuery()
返回的是 LambdaQueryChainWrapper<T>
类型的 wrapper 实例导致的。貌似这个类型只能用来做链式查询。
remove()
方法接收的是 Wrapper<T>
类型的参数,而 LambdaQueryChainWrapper<T>
是继承了这个类型的,所以编译时并不会报错。(这种设计感觉有点坑)
类似的还有 lambdaUpdate()
返回的 LambdaUpdateChainWrapper<T>
类型的 wrapper 。
将 remove() 方法的参数改为通过 Wrappers.<T>lambdaQuery()
方法创建的 wrapper 实例( LambdaQueryWrapper<T>
类型)就可以了。
java
this.remove(Wrappers.<SomeEntity>lambdaQuery().eq(SameStyleEntity::getCode, code));