mybatis-flex / mybatis-flex

mybatis-flex is an elegant Mybatis Enhancement Framework
https://mybatis-flex.com
Apache License 2.0
1.89k stars 182 forks source link

[BUG] 多对多关联查询时,当结果只有一个时,使用mapper查询报错,使用activeRecord方式正常 #275

Closed kannon007 closed 8 months ago

kannon007 commented 8 months ago

多对多关联查询时,当结果只有一个时,使用mapper查询报错,使用activeRecord方式正常 image

错误日志

java.lang.ClassCastException: class com.zjw.metadata.dto.user.UserVo cannot be cast to class com.mybatisflex.core.row.Row (com.zjw.metadata.dto.user.UserVo and com.mybatisflex.core.row.Row are in unnamed module of loader 'app')

    at com.mybatisflex.core.relation.RelationManager.lambda$doQueryRelations$2(RelationManager.java:345)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at com.mybatisflex.core.relation.RelationManager.doQueryRelations(RelationManager.java:299)
    at com.mybatisflex.core.relation.RelationManager.queryRelations(RelationManager.java:263)
    at com.mybatisflex.core.util.MapperUtil.queryRelations(MapperUtil.java:219)
    at com.mybatisflex.core.util.MapperUtil.queryRelations(MapperUtil.java:213)
    at com.mybatisflex.core.BaseMapper.selectOneWithRelationsById(BaseMapper.java:490)
    at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:733)
    at org.apache.ibatis.binding.MapperProxy$DefaultMethodInvoker.invoke(MapperProxy.java:154)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
    at jdk.proxy2/jdk.proxy2.$Proxy115.selectOneWithRelationsById(Unknown Source)
    at com.mybatisflex.core.BaseMapper.selectOneWithRelationsByIdAs(BaseMapper.java:503)
    at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:733)
    at org.apache.ibatis.binding.MapperProxy$DefaultMethodInvoker.invoke(MapperProxy.java:154)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
    at jdk.proxy2/jdk.proxy2.$Proxy115.selectOneWithRelationsByIdAs(Unknown Source)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at com.mybatisflex.core.mybatis.MapperInvocationHandler.invoke(MapperInvocationHandler.java:89)
    at jdk.proxy2/jdk.proxy2.$Proxy115.selectOneWithRelationsByIdAs(Unknown Source)
    at com.zjw.metadata.SelectTest.testRecord(SelectTest.java:23)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

debug activeRecord

image

debug mapper 这里对比上面 发现查询出的对象不对

image

kannon007 commented 8 months ago

image

yangfuhai commented 8 months ago

参考文档:https://mybatis-flex.com/zh/faq.html#springboot-%E9%A1%B9%E7%9B%AE%E4%B8%AD%E5%87%BA%E7%8E%B0-class-com-xxx-cannot-be-cast-class-com-xxx-%E7%9A%84%E9%94%99%E8%AF%AF