baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.42k stars 4.31k forks source link

Mybatis-plus 3.5.4 的AOP问题 #5741

Closed jktantan closed 1 year ago

jktantan commented 1 year ago

当前使用版本(必填,否则不予处理)

Mybatis-plus 3.5.4 Springboot 3.1.5

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用任何一个batch的方法,比如:removeBatchById等,就会出现错误,这种情况在3.5.4之前的版本不存在。

重现步骤(如果有就写完整)

报错信息

class org.springframework.aop.framework.JdkDynamicAopProxy cannot be cast to class com.baomidou.mybatisplus.core.override.MybatisMapperProxy (org.springframework.aop.framework.JdkDynamicAopProxy and com.baomidou.mybatisplus.core.override.MybatisMapperProxy are in unnamed module of loader 'app')

nieqiurong commented 1 year ago

提供一个复现工程上来看看

jktantan commented 1 year ago

提供一个复现工程上来看看

原工程没有办法提交上来了,有点大了,这个工程是从3.5.3.2升到3.5.4的,在3.5.3.2的时候没问题。我这几天创建一个新工程看看会不会也有这问题。

nieqiurong commented 1 year ago

提供一个复现工程上来看看

原工程没有办法提交上来了,有点大了,这个工程是从3.5.3.2升到3.5.4的,在3.5.3.2的时候没问题。我这几天创建一个新工程看看会不会也有这问题。

那我只能把mapper层进行aop增强复现一下了,什么情况下切入点会把mapper层也切入进去

nieqiurong commented 1 year ago

把这个版本覆盖到本地试试.

链接:https://pan.baidu.com/s/1A2pbVDU3TpjXFIDJDqpY9A 提取码:yg36

jktantan commented 1 year ago

版本号是3.4.0.1?

nieqiurong commented 1 year ago

版本号是3.4.0.1? | | 胡宇峰 | | @. | ---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2023年10月25日 15:10 | | 收件人 | @.> | | 抄送人 | @.> , @.> | | 主题 | Re: [baomidou/mybatis-plus] Mybatis-plus 3.5.4 的AOP问题 (Issue #5741) | 把这个版本覆盖到本地试试. 链接:https://pan.baidu.com/s/1A2pbVDU3TpjXFIDJDqpY9A 提取码:yg36 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.>

看错文件了,这个才对,3.5.4 链接:https://pan.baidu.com/s/12r4mfbq_0fc5E7x0962YJA 提取码:1fab

LoptrX commented 1 year ago

存在相同的情况使用的是 saveBatch

nieqiurong commented 1 year ago

存在相同的情况使用的是 saveBatch

用上面分享的百度云盘里面的版本试试

LoptrX commented 1 year ago

存在相同的情况使用的是 saveBatch

用上面分享的百度云盘里面的版本试试

使用导包正常了

jktantan commented 1 year ago

版本号是3.4.0.1? | | 胡宇峰 | | @. | ---- 回复的原邮件 ---- | 发件人 | @.**> | | 发送日期 | 2023年10月25日 15:10 | | 收件人 | @.**> | | 抄送人 | @.**> , @.**> | | 主题 | Re: [baomidou/mybatis-plus] Mybatis-plus 3.5.4 的AOP问题 (Issue #5741) | 把这个版本覆盖到本地试试. 链接:https://pan.baidu.com/s/1A2pbVDU3TpjXFIDJDqpY9A 提取码:yg36 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.>

看错文件了,这个才对,3.5.4 链接:https://pan.baidu.com/s/12r4mfbq_0fc5E7x0962YJA 提取码:1fab

恩,我这里试了,也没问题了。

houkunlin commented 1 year ago

遇到同样的问题,removeByIds(Collections.singletonList(0L)) image

203579397 commented 1 year ago

我也是同样问题,回退3.5.3.2没问题;升级是因为正好有用到新版本的的大数据流式查询;我这边继承ServiceImpl IService 的类没有接口 是直接 @Service 的类,看到报aop错误猜测可能是因为这一块 没处理好

nieqiurong commented 1 year ago

已发布 3.5.5-SNAPSHOT解决,不升级的话,可以根据业务情况,看能否取消对mapper层aop扫描增强解决.

LoptrX commented 1 year ago

我这边因为用了 @Repository 标注导致的

203579397 commented 1 year ago

@LoptrX 跟这个有啥关系,不得注入ioc容器才能DI出来吗

LoptrX commented 1 year ago

@LoptrX 跟这个有啥关系,不得注入ioc容器才能DI出来吗

重新确认了一下,确实是 @Repository 这个注解去注册 bean 导致的

jktantan commented 1 year ago

@LoptrX 跟这个有啥关系,不得注入ioc容器才能DI出来吗

重新确认了一下,确实是 @repository 这个注解去注册 bean 导致的

你意思是,使用@Mapper就没有问题了?

houkunlin commented 1 year ago

我的项目里面所有的 Mapper 都用了 @repository 注解,但是我发现,我有的 Mapper 会出现这个问题,有的不会,最后发现疑似是启动了逻辑删除和自动填充导致了这个AOP异常

LoptrX commented 1 year ago

@LoptrX 跟这个有啥关系,不得注入ioc容器才能DI出来吗

重新确认了一下,确实是 @repository 这个注解去注册 bean 导致的

你意思是,使用@Mapper就没有问题了?

具体没有过多测试,我把出问题的 mapper 去掉就好了,我现在是@MapperScan扫描注册的

houkunlin commented 1 year ago
java.lang.ClassCastException: class org.springframework.aop.framework.JdkDynamicAopProxy cannot be cast to class com.baomidou.mybatisplus.core.override.MybatisMapperProxy (org.springframework.aop.framework.JdkDynamicAopProxy and com.baomidou.mybatisplus.core.override.MybatisMapperProxy are in unnamed module of loader 'app')
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getSqlSessionFactory(ServiceImpl.java:90)
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:271)
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.removeBatchByIds(ServiceImpl.java:335)
    at com.baomidou.mybatisplus.extension.service.IService.removeBatchByIds(IService.java:202)
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.removeByIds(ServiceImpl.java:304)
jktantan commented 1 year ago

@nieqiurong @LoptrX @houkunlin 我这边试了一下,的确,如何用repository的话就会出问题,如果改成mapper的话就没问题。

houkunlin commented 1 year ago

能不能发布一个 3.5.4.1 紧急修复一下这个问题,3.5.5 的快照还需要配置仓库地址,不想再配置仓库地址了

203579397 commented 1 year ago

能不能发布一个 3.5.4.1 紧急修复一下这个问题,3.5.5 的快照还需要配置仓库地址,不想再配置仓库地址了

附议

nieqiurong commented 1 year ago

已发布3.5.4.1

xieshaoping commented 7 months ago

image 我也出现了同样的问题,使用的是3.5.4版本,updateBatchById方法,3.5.3.1升级而来的,3.5.3.1没问题。 用的也是@Repository,改成了@Mapper,可以正常运行了,但不确定有没有其他潜在风险

Nanchengjiumeng123 commented 6 months ago

确实是@repository得问题。改了就好了。