2014-11-19 4 views
1

MyBatis <collection> 요소 (버전 3.2.7 사용)에 복합 키를 전달할 수 없습니다. MyBatis documentation 상태 :MyBatis의 복합 키 <collection> 매핑

주 : 복합 키를 처리하려면 = "{prop1 = COL1, prop2 = COL2} '구문 열을 사용하여 중첩 된 SELECT 문에 전달할 여러 열 이름을 지정할 수 있습니다. 그러면 prop1 및 prop2가 대상 중첩 select 문에 대한 매개 변수 객체에 대해 설정됩니다.

그러나, 내 모든 시도는이 예외를 (다른 ResultsMap에있는)

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.lang.Integer with invalid types() or values(). Cause: java.lang.NoSuchMethodException: java.lang.Integer.<init>()

컬렉션을 생산 구현하는 것은 :

<collection property="foos" ofType="FooObject" 
    column="{param1=user_id,param2=foo_id}" select="getFoosByUser" > 
     <id property="userId" column="user_id" /> 
     <id property="foo" column="foo_id" /> 
     <result property="fooName" column="foo_name" /> 
</collection> 

그것의 ArrayList를 반환해야 Foo 개체. 복합 키는 user_id 및 foo_id입니다. 선택 검색어 :

<select id="getFoosByUser" parameterType="Integer" resultType="FooObject"> 
     SELECT 
      user_id AS userId, 
      foo_id AS fooId, 
      foo_name AS fooName 
     FROM foo_table 
     WHERE user_id = #{param1} 
     AND foo_id = #{param2} 
    </select> 

하나의 매개 변수 만 사용하면 검색어가 올바르게 작동합니다. foo_id=#{param2}을 제거한 다음 컬렉션에 column=user_id을 사용했지만 두 개의 키에 대해 열 속성을 올바르게 구성하는 방법을 찾지 못했습니다. 어떤 아이디어?

답변

2

둘 이상의 매개 변수가있는 경우 MyBatis는 parameterType을 사용하여 혼란 스럽습니다. 다음과 같이 쿼리 매핑을 수정하십시오 :

<select id="getFoosByUser" resultType="FooObject"> 
    SELECT 
     user_id AS userId, 
     foo_id AS fooId, 
     foo_name AS fooName 
    FROM foo_table 
    WHERE user_id = #{param1} 
    AND foo_id = #{param2} 
</select> 
+0

parameterType 속성을 제거하고 위의 모든 항목을 그대로 유지하면 감사합니다! – user2759013