为什么多对多级联会出现堆栈溢出的问题

pojo


@Data
public class User2 {
    private Long id;
    private String userName;
    private String realName;
    private SexEnum sex;
    private String mobile;
    private String tel;
    private String email;
    private String note;
    // 用户一对多
    private List<Role2> roleList;
}

@Data
public class Role2 {
    private Long id;
    private String roleName;
    private String note;
    // 角色一对多
    private List<User2> userList;
}

Mapper

public interface UserMapper2 {
    
    public User2 getUser(Long id);
    
    public List<User2> findUserByRoleId(Long roleId);
}

public interface RoleMapper2 {
    public Role2 getRole(Long id);

    public List<Role2> findRoleByUserId(Long userId);
}

xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis03.mapper2.UserMapper2">
    <resultMap id="UserMap" type="mybatis03.pojo2.User2">
        <result property="id" column="id"/>
        <result property="userName" column="id"/>
        <result property="realName" column="id"/>
        <result property="sex" column="id" typeHandler="mybatis02.typehandler.SexEnumTypeHandler"/>
        <result property="mobile" column="id"/>
        <result property="tel" column="id"/>
        <result property="email" column="id"/>
        <result property="note" column="id"/>
        <collection property="roleList" column="id" select="mybatis03.mapper2.RoleMapper2.findRoleByUserId"/>
    </resultMap>
    <select id="getUser" resultMap="UserMap">
        select id, user_name, real_name, sex, moble, email, note from t_user where
            id =#{id}
    </select>

    <select id="findUserByRoleId" resultMap="UserMap">
        select
            a.*
        from
            t_user a
                left join t_user_role b on a.id =b.user_id
                left join t_role2 c on b.role_id =c.id
        where
            c.id =#{id}
    </select>
</mapper>


---------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis03.mapper2.RoleMapper2">
    <resultMap id="RoleMap" type="mybatis03.pojo2.Role2">
        <id property="id" column="id"/>
        <result property="roleName" column="role_name"/>
        <result property="note" column="note"/>
        <collection property="userList" column="id" fetchType="lazy"
         select="mybatis03.mapper2.UserMapper2.findUserByRoleId"/>
    </resultMap>
    <select id="getRole" resultMap="RoleMap">
        select id,role_name,note from t_role2 where id=#{id}
    </select>
    <select id="findRoleByUserId" resultType="mybatis03.pojo2.Role2" >
        select
            a.*
        from
            t_role2 a
                left join t_user_role b on a.id =b.role_id
                left join t_user c on b.user_id =c.id
        where
            c.id = #{id}
    </select>

</mapper>



测试:

 public static void getRole2() {
        SqlSession sqlSession = null;
        try {
            Logger logger = Logger.getLogger(mybatis03Test.class);
            sqlSession = SqlSessionFactoryUtils.openSqlSession();
            RoleMapper2 roleMapper2 = sqlSession.getMapper(RoleMapper2.class);
            List<Role2> role2=roleMapper2.findRoleByUserId(1l);
           logger.debug(role2);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }

执行之后就会报错,堆栈溢出
我也知道他们里面会有嵌套,但是不logger出来是不会报错的,只会出来执行sql,而logger之后就会堆栈溢出。
我目前是把xml文件collection元素中的select换成了oftype

   <resultMap id="RoleMap" type="mybatis03.pojo2.Role2">
        <id property="id" column="id"/>
        <result property="roleName" column="role_name"/>
        <result property="note" column="note"/>
        <collection property="userList" column="id" fetchType="lazy" ofType="mybatis03.pojo2.User2"/>
<!--         select="mybatis03.mapper2.UserMapper2.findUserByRoleId"/>-->
    </resultMap>

按照原先的xml文件怎么去解决堆栈溢出的问题呢?

对象之间互相嵌套,打印会一直递归,可以用json序列化后打印,忽略掉重复属性