2015-01-12 4 views
1

수동으로 실행 한 경우 4 개의 결과가 반환되는 쿼리가 있지만 MyBatis 3.7.8 (로그에 '4 개의 결과가 있음'이라고 표시됨)를 통해 실행되는 경우 3 개의 결과 만 나타납니다. 그래서 사람이 어딘가에서 길을 잃은 것 같아요. 왜 그런지 모르겠습니다.MyBatis에서 모든 결과가 반환되지 않음

내 결과 맵에 고유 한 식별자가 없지만 내 테이블 중복이 허용되며 이것도 반환되어야한다고 생각됩니다.

된 resultMap :

<resultMap type="my.package.Info" id="InfoMap"> 
    <result property="taskownerId"   column="v_taskowner_id"/> 
    <result property="shipmentUnitId"  column="v_shipmentunit_id"/> 
    <result property="sampleId"    column="v_sample_id"/> 
    <association property="spread" column="v_spread_id" javaType="Spread"> 
     <id property="id" column="v_spread_id" /> 
     <result property="name" column="v_spread_name" /> 
    </association> 
</resultMap> 

선택 :

<select id="findInfos" resultMap="InfoMap" parameterType="map"> 
    SELECT 
     v.taskowner   v_taskowner, 
     v.shipmentunit_id  v_shipmentunit_id, 
     v.sample_id   v_sample_id, 
     v.spread_id   v_spread_id, 
     v.spread_name   v_spread_name 
    FROM 
     view_infos v 
    <where> 
    rownum &lt;= 10000 
    AND v.sample_id = #{sampleId}  
    <if test="taskownerId != null"> 
     AND v.taskowner = #{taskownerId} 
    </if> 
    </where> 
</select> 

답변

0

이 완전한 솔루션보다 해결의 더 : 결과가 중첩 된 결과지도입니다

경우 (중첩 된 객체가있는 객체) MyBatis ne 해당 맵에서 리턴 된 모든 오브젝트의 ID를 편집하고 <id> 태그가 없으므로 MyBatis는 해당 오브젝트를 구별 할 수 없습니다. 나는 약식 코드가 눈에 띄지 않을 정도로 간단하기 때문에 (클래스는 ID와 이름 만 포함하고 있기 때문에) 클래스에서 중첩 된 객체를 제거함과 동시에이 문제를 해결했다.

이제이 쿼리에 예상되는 결과가 표시됩니다.

앞에서 설명한 것처럼이 방법은 해결 방법 일뿐 해결책이 아닙니다. 더 복잡한 중첩 된 개체의 경우 을 참조 할 수 없습니다.

관련 문제