[MyBatis] association columnPrefix 중첩 사용시 주의 사항 :: 소림사의 홍반장!

jpa사용하면서 이런 고민안해서 좋았었는데 


간만에 mybatis로 여러 depth의 객체를 매핑해야 하는 일이 생겼다.


<resultMap id="testMap" type="com.test.Tester">
<id column="no" property="no"/>
<result column="col" property="col" />
<association property="tester" resultMap="tester1" columnPrefix="t1_"/>
</resultMap>


<resultMap id="tester1" type="com.test.Tester">
<id column="no" property="no"/>
<result column="col" property="col" />
<association property="tester" resultMap="tester2" columnPrefix="t2_"/>
</resultMap>


<resultMap id="tester2" type="com.test.Tester">
<id column="no" property="no"/>
<result column="col" property="col" />
</resultMap>


만약 Tester 객체 안에 Tester, 그 안에 또 Tester 객체를 한 번에 조회해서 매핑하고 싶다면 이렇고 쿼리를 짤 것이다.


<select id="selectTest" resultMap="testMap">

SELECT

    t.no,

t.col,

t1.no as t1_no

t1.col as t1_col

t2.no as t2_no

t2.col as t2_col

FROM tester t
left join tester t1 on t.no = t1.no

left join tester t2 on t.no = t2.no

</select>


여기서 주의해야 할 점이..


이미 t1_으로 columnPrefix가 적용된 상태에서는 그 하위에 association 사용 시 상위 prefix가 그대로 적용된다는 점이다.


따라서 쿼리는

SELECT

    t.no,

t.col,

t1.no as t1_no

t1.col as t1_col

t2.no as t1_t2_no

t2.col as t1_t2_col

FROM tester t
left join tester t1 on t.no = t1.no

left join tester t2 on t.no = t2.no


이렇게 상위의 prefix 까지 사용해야 함.


매핑안된다고 삽질하지 맙시다.


다른 카테고리의 글 목록

삽질방지 팁 카테고리의 포스트를 톺아봅니다