2014-12-22 3 views
0

그래서 MyBatis를 사용하여 내 DB에 매핑하는 꽤 복잡한 Java 객체가 있습니다. 모든 개체, 모든 자식, 손자 등을 동시에 검색 할 수 있기를 원하므로 결과 맵을 만들었습니다. 그것은MyBatis가 특정 필드를 검색하지 않습니다.

<resultMap id="BaseResultMap" type="Parent"> 
    <id column="PARENT_PK" jdbcType="VARCHAR" property="pk" /> 
    <association property="address" javaType="address"> 
     <id column="address_PK" jdbcType="VARCHAR" property="pk" /> 
    </association> 
    <collection property="Children" javaType="java.util.ArrayList" ofType="Child"> 
     <id column="CHILD_PK" property="Pk" jdbcType="VARCHAR" /> 
     <result column="SCHEMA.CHILDREN.DESCRIPTION" property="description" jdbcType="VARCHAR" /> 
     <collection property="Children" javaType="java.util.ArrayList" ofType="Grandchildren"> 
      <id column="Grand_child_pk" jdbcType="VARCHAR" property="pk" /> 
      <result column="SCHEMA.GRAND_CHILDREN.DESCRIPTION" property="description" jdbcType="VARCHAR" /> 
      <collection property="children" javaType="java.util.ArrayList" ofType="GreatGrandChildren"> 
       <result column="NAME" property="name" jdbcType="VARCHAR"/> 
      </collection> 
     </collection> 
    </collection 

과 내 SQL 같은 것이

같은 것이 PARENT_PK, ADDRESS_PK, CHILD_PK을 선택입니다입니다, SCHEMA.CHILDREN.DESCRIPTION, GRAND_CHILD_PK, SCHEMA.GRAND_CHILDREN.DESCRIPTION, 이름 발신 번호 ...

대부분의 입력란이 올바르게 채워지고 있으며, 각 단계마다 적절한 수의 아동을 돌보는 일. 그러나 설명 필드 중 어느 것도 채워지지 않습니다. 널 값을 얻고 있습니다. 다른 모든 것은 잘 작동합니다. Mybatis를 사용하여 관계를로드하지 않고 자식 또는 손자 만 검색하는 경우 설명 필드가 올바르게 작동합니다. 한 번에 모든 것을 얻으 려 할 때만입니다.

쿼리를 수동으로 실행하면 설명 열을 아무 문제없이 검색하므로 내 sql 코드에 문제가 있다고 생각하지 않습니다.

무슨 일이 벌어지고 있는지에 대한 아이디어가 있습니까?

답변

1

다른 테이블의 동일한 열 이름에서 문제가 발생한다고 생각합니다. DESCRIPTION. MyBatis는이 두 열이 어떤 테이블에서 왔는지를 알 수 없습니다. 당신의 선택 쿼리에서이 열에 열 별칭을 제공하십시오 :

SELECT PARENT_PK, ADDRESS_PK, CHILD_PK, SCHEMA.CHILDREN.DESCRIPTION C_DESC, 
GRAND_CHILD_PK, SCHEMA.GRAND_CHILDREN.DESCRIPTION GC_DESC, NAME FROM ... 

그런 다음 별칭으로지도 :

<resultMap id="BaseResultMap" type="Parent"> 
    <id column="PARENT_PK" jdbcType="VARCHAR" property="pk" /> 
    <association property="address" javaType="address"> 
     <id column="address_PK" jdbcType="VARCHAR" property="pk" /> 
    </association> 
    <collection property="Children" javaType="java.util.ArrayList" ofType="Child"> 
     <id column="CHILD_PK" property="Pk" jdbcType="VARCHAR" /> 
     <result column="C_DESC" property="description" jdbcType="VARCHAR" /> 
     <collection property="Children" javaType="java.util.ArrayList" ofType="Grandchildren"> 
      <id column="Grand_child_pk" jdbcType="VARCHAR" property="pk" /> 
      <result column="GC_DESC" property="description" jdbcType="VARCHAR" /> 
      <collection property="children" javaType="java.util.ArrayList" ofType="GreatGrandChildren"> 
       <result column="NAME" property="name" jdbcType="VARCHAR"/> 
      </collection> 
     </collection> 
    </collection> 
</resultmap>