次のシナリオがあります。
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.
誰かがこれを設定する方法を私に明確にすることができますか?
<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>