[MyBatis/MySQL] Result Map을 조심 하세요.
- 문제 상황이 발생했다.
어떤 데이터를 조회하는데 일부가 누락되어 조회되는 상황발생.
- 어떤 select 쿼리에 아래와 같이 limit 100이 적용 되 있다.
pageable이 null 일 경우 조회결과에 limit 100을 건다.
limit가 없을 시 해당쿼리의 실행결과가 122건이라고 할 때,
limit가 적용되 있으면 몇건을 반환할까?
limit 100 이니까 당연히 100건인것 같지만,
현실은 24건을 반환한다.
원인은 result Map 이 적용되 있기 때문.
resultMap이란 결과값을 map에다 담아주는 역할을 함.
resultMap을 찾아가보자.
해당 resultMap의 안에서 collection 작업을 통해서 grouping 해주기 떄문에
100개의 row가 24개로 결과가 나오게 된다.
이러면 문제가..
원래는 전체 조회row 수가 122건이어야 하는데,
pageable == null 이어서 limit 100 이 적용되어 100건만 조회하는게 된다는 거..
그런데 resultMap collection이 적용되어 조회결과가 24건으로 줄어 들었기 때문에,
limit 100은 의심도 안하게 되는 문제가 생긴다.
( 조회된 row수가 24건이니까 limit 100은 상관이 없겠군! )
pageable을 넘겨주어 limit 100이 적용되지 않으면 122건이 조회가 되고,
collection을 돌리면 28건이 조회되게 된다.
그러니까, 28건이 조회가 되야 정상인데 계속 24건만 조회가 되니까 원인을 못찾고 해매게 되는 것.
search 결과를 반환하려고 resultMap에서 collection을 돌릴때, 이점을 주의 해야 함.