Skip to content

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));