バッチ挿入中に生成されたキーを取得中にエラーが発生しました。 バッチ挿入が正常に機能します。MyBatis useバケットインサート内のネストされたオブジェクトのキー
オブジェクト構造:
オブジェクト1:
Long id, String name, Obj2 obj
対象2:(OBJ2)
Long id, String value
オブジェクトの両方が異なるテーブルに格納されています。
表オブジェクト1
id | name | object2_id (Foreign Key)
表object2は
id | value
今私は挿入するオブジェクト1のリストを持っています。
プロセスは、インサート対象2ことIDを取得し、(外部キーなど)Object2にの "ID" とオブジェクト1を挿入します。
Object2に、Mapper.xml
に入れ子ケースを挿入しながら1:
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="obj1s.obj2.id">
<!-- obj1s is name of the list -->
insert into object2 (value) values
<foreach collection="obj1s" item="obj1" separator=",">
(#{obj1.obj2.id})
</foreach>
</insert>
ERROR: Error getting generated key or setting result to parameter object.
ケース2:
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="obj1.obj2.id">
<!-- obj1 so as to access the object of foreach loop -->
insert into object2 (value) values
<foreach collection="obj1s" item="obj1" separator=",">
(#{obj1.obj2.id})
</foreach>
</insert>
ERROR: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'obj1' not found. Available parameters are [obj1s, param1]
ケース3:
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="obj2.id">
<!-- obj2 is the object with variable id to store generated key -->
insert into object2 (value) values
<foreach collection="obj1s" item="obj1" separator=",">
(#{obj1.obj2.id})
</foreach>
</insert>
ERROR: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'obj2' not found. Available parameters are [obj1s, param1]
これを達成するためにとにかくはありますか? selectKeyを使用している可能性がありますが、自動生成されたキーをサポートしていないDBでは、selectkeyが使用されます。
MyBatis 3.3.1およびMysqlの使用。
マッピングクラス/プロパティを明確にしてください<=>テーブル/カラム – blackwizard
@blackwizardマッピングは列名とプロパティ名で分かります。 – Shuddh