web-dev-qa-db-ja.com

MyBatis、複雑なオブジェクトを挿入

次のシナリオがあります。

public class MyObj{
    private String myField_1
    private String myField_2
    private MyChildObj myChild
    // Constructor & get/set
}

public class MyChildObj{
    private String myField_3
    private String myField_4
    // Constructor & get/set
}

私のQuery.xmlで、私はこのように挿入を書きました:

<insert id="insertMyObj" parameterType="MyObj">
    INSERT INTO MY_TABLE    (   FIELD_1,
                                FIELD_2,
                                FIELD_3,
                                FIELD_4)
    values  (   #{myField_1},
                #{myField_2},
                #{myField_3},
                #{myField_4},
    )
</insert>

mybatis結果マップガイドを読んだ後、mybatis-config.xmlファイルに次の行を追加しようとしました。

<typeAliases>
    <typeAlias alias="MyObj"        type="myPackage.MyObj"/>
    <typeAlias alias="MyChildObj"   type="myPackage.MyChildObj"/>
</typeAliases>

<resultMap id="insertObj" type="MyObj">
    <result property="myField_1"  column="FIELD_1"/>
    <result property="myField_2"  column="FIELD_2"/>
    <association property="PrimaryKeyMap" resultMap="PrimaryKey"/>
</resultMap>

<resultMap id="PrimaryKeyMap" type="PrimaryKey">
    <result property=myField_3  column="FIELD_3"/>
    <result property="myField_4"  column="FIELD_4"/>
</resultMap>

しかし、私は次のエラーを受け取り続けます:

### Cause: org.Apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: xx; columnNumber: xx; Element type "resultMap" must be declared.

誰かがこれを設定する方法を私に明確にすることができますか?

11
Koop4

<association>resultMap属性は、Java type:<association property="MyChildObject" resultMap="PrimaryKeyMap"/>ではなく、結果マップの名前を参照する必要があります。

ただし、MyChildObjectが別のテーブルとしてデータベースに格納されている場合、ネストされた挿入は サポートされていません です。 Javaで両方の挿入を呼び出す必要があります。 ResultMapsはselects用です。

1つのテーブルのいくつかの列を別のオブジェクトに配置するだけの場合は、ドット表記myChildObject.myField_4を使用してこれを行うことができます。このようなもの:

<insert id="insertMyObj" parameterType="MyObj">
  INSERT INTO MY_TABLE    (   FIELD_1,
                              FIELD_2,
                              FIELD_3,
                              FIELD_4)
  values  (   #{myField_1},
              #{myField_2},
              #{myChildObject.myField_3},
              #{myChildObject.myField_4},
  )
</insert>
9
AngerClown