[apache/dubbo]使用mybatis延迟加载时,因为接口返回的是代理对象,导致dubbo序列化后属性值全部为null

2024-05-30 714 views
7

最近想在原先的系统上使用dubbo。 系统使用的是mybatis,开启了延迟加载:

<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" /> 

调试发现接口返回的是代理对象,所以controller(springMVC)得到的数据属性都是null。 如果关掉延迟加载,得到的数据有值了,但系统部分原有的功能受到了影响,会加载一些原先需要延迟加载的数据,且如下的树对象陷入不停循环,导致内存溢出:

    <resultMap type="BaseTreePojo" id="baseTreePojo" extends="com.lmiky.platform.sort.pojo.BaseSortPojo.baseSortPojo">
        <result column="name" property="name"/>
        <result column="leaf" property="leaf"/>
        <association property="parent" column="parentId" select="com.lmiky.platform.tree.pojo.BaseTreePojo.findById"/>
        <collection property="children" column="id" select="com.lmiky.platform.tree.pojo.BaseTreePojo.listByParent"/>
    </resultMap>

有什么尽量不修改原有系统代码的解决方法吗,dubbo是不是无法序列化代理对象,希望能帮忙回答下,谢谢。

回答

4

应该是不能处理这种情况. 远程调用后, 数据不在 mybatis 的管理之下了.

9

@yinheli 谢谢回答,我没看明白,能说的清楚点吗,有没有解决方法,系统是以前开发的,有不少地方用到association或collection,如果关闭延迟加载,影响挺大的。

0

想了下,好像是我思想没拐过弯,不管有没有延迟加载,到了controller里,都是被dubbo序列化后的一个新对象,已经完全脱离了mybatis了,这时候即使想使用mybatis的延迟加载也不行了

9

设置成非延迟吧、

3

个人认为拆分成两个服务。要用到的时候调用。

8

这事情让我难受了2天,大部分解决方案让我不要用延迟加载,笑死我了。