2015-07-27 31 views
8

Mam następujący scenariusz:MyBatis włóż ze złożonego obiektu

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 
} 

na moim Query.xml napisałem wkładkę w ten sposób:

<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> 

po przeczytaniu mybatis Wynik Mapa Przewodnik próbowałem dodać następujące linie na pliku 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> 

ale wciąż otrzymuję następujący błąd:

### 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. 

Czy ktoś może mi wyjaśnić, jak to skonfigurować?

Odpowiedz

7

Atrybut resultMap w <association> musi odnosić się do nazwy mapy wynikowej, a nie typu Java: <association property="MyChildObject" resultMap="PrimaryKeyMap"/>

Jednak jeśli MyChildObject są przechowywane w bazie danych jako osobnej tabeli, zagnieżdżone wkładki not supported. Będziesz musiał wywołać obie wstawki w Javie. ResultMaps są dla wybiera.

Jeśli kładziesz kilka kolumn z jednej tabeli w osobnym obiekcie, możesz to zrobić z notacją kropkową, myChildObject.myField_4. Coś takiego:

<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> 
+0

MyChildObject jest kluczem podstawowym dla tej tabeli. Spróbuję teraz, z góry dzięki, napiszę jak najszybciej! – Koop4

+0

Wystarczyło zmienić zapytanie zgodnie z sugestią! Dzięki jeszcze raz! – Koop4