3

mybatisマッピングを使用して、別のコレクションのオブジェクトのコレクションを設定する必要があります。

columnPrefixを使用しなくても機能しますが、繰り返し可能な列がたくさんあるので必要です。

     <resultMap id="ParentMap" type="org.example.mybatis.Parent">
        <id column="Id" jdbcType="VARCHAR" property="id" />
        <result column="Name" jdbcType="VARCHAR" property="name" />
        <result column="SurName" jdbcType="VARCHAR" property="surName" />

        <collection property="childs"
        javaType="ArrayList" ofType="org.example.mybatis.Child"
        resultMap="ChildMap" columnPrefix="c_"/>       
    </resultMap>

<resultMap id="ChildMap" type="org.example.mybatis.Parent">
    <id column="Id" jdbcType="VARCHAR" property="id" />
    <result column="ParentId" jdbcType="VARCHAR" property="parentId" />
    <result column="Name" jdbcType="VARCHAR" property="name" />
    <result column="SurName" jdbcType="VARCHAR" property="surName" />
    <result column="Age" jdbcType="INTEGER" property="age" />

    <collection property="toys"
        javaType="ArrayList" ofType="org.example.mybatis.Toy"
        resultMap="ToyMap" columnPrefix="t_"/>   
</resultMap>

<resultMap id="ToyMap" type="org.example.mybatis.Toy">
    <id column="Id" jdbcType="VARCHAR" property="id" />
    <result column="ChildId" jdbcType="VARCHAR" property="childId" />
    <result column="Name" jdbcType="VARCHAR" property="name" />
    <result column="Color" jdbcType="VARCHAR" property="color" />
</resultMap>

<sql id="Parent_Column_List">
    p.Id, p.Name, p.SurName,
</sql>  

<sql id="Child_Column_List">
    c.Id as c_Id, c.ParentId as c_ParentId, c.Name as c_Name, c.SurName as c_Surname, c.Age as c_Age,
</sql>

<sql id="Toy_Column_List">
    t.Id as t_Id, t.Name as t_Name, t.Color as t_Color
</sql>  

<select id="getParent" parameterType="java.lang.String" resultMap="ParentMap" >
    select 
    <include refid="Parent_Column_List"/>
    <include refid="Child_Column_List" />
    <include refid="Toy_Column_List" />
    from Parent p

    left outer join Child c on p.Id = c.ParentId
    left outer join Toy t on c.Id = t.ChildId
    where p.id = #{id,jdbcType=VARCHAR}

columnPrefixを使用すると、すべて正常に機能しますが、ネストされたおもちゃのコレクションは空です。データベースのSQLクエリは正しく機能し、すべてのおもちゃが結合されます。

私は何かを逃したのかもしれませんか、これはmybatisのバグですか?

4

2 に答える 2

6

私はあなたと同じ問題を抱えていました。nullを返す理由は、ChildMapには列プレフィックス「c_」があり、ToyMapのプレフィックスは「t_」ですが、ChildMapにはコレクション属性ごとにToyMapが含まれているためです。したがって、実際には、この場合、Toyテーブルのすべての列に接頭辞「c_t_」が付いている必要があります。

<sql id="Toy_Column_List">
    t.Id as c_t_Id, t.Name as c_t_Name, t.Color as c_t_Color
</sql>  
于 2012-11-01T11:55:01.160 に答える