본문 바로가기
카테고리 없음

ibatis 오류 - remapResults 옵션과 동적쿼리 The error occurred while applying a parameter map.

by 휘루걸음 2011. 10. 20.
728x90
반응형
출처 :  http://cozyhill.blog.me/70107138653

By. cozyhill (www.jlancer.net)

 

ibatis는 쿼리를 최초 쿼리를 조회 한후 조회 결과의 메타(Meta Data- 컬럼리스트, 테이블명)를 캐쉬에 저장하여 놓아 다음 동일 쿼리 호출시 해당 컬럼으로 데이타 결과를 보여 주어 성능 향상을 꾀하고 있다. 그러나 동적쿼리 사용시 문제가 발생 할 수 있다.

 

예) 정적: select a, b, c from 테이블명;

     동적: select $컬럼목록변수$ from 테이블명;

 

위의 예문에서 정적쿼리로 컬럼명이 a, b, c 같이 고정 되어 있을 경우는 잇점이되나

$컬럼목록변수$ 와 같이 테이블 컬럼이 변경 될 수 있을 경우는 최초 조회결과의 컬럼명이 캐쉬에 저장된다. 따라서 $컬럼목록변수$ -> 'a, b, c' 컬럼을 지정하여 결과를 얻은 후

 $컬럼목록변수$ -> 'd, e, f'로 변수값을 변경하면 최초 'a, b, c'  메타 캐쉬로 저장 되어 있기 때문에 'd, e, f' 컬럼들을 찾을 수 없다는 아래와 같은 오류가 발생한다.

 

--- The error occurred while applying a parameter map.
--- Check the queryMap.inserTest-InlineParameterMap.
--- Check the parameter mapping for the 'keyCode' property.

 

이럴때 메타데이터를 캐쉬에 저장 하지 말고 항상 쿼리조회시 컬럼을 맵핑하여 가져 오게 할 수 있는데 remapResults = true로 지정하여 주면 된다.

 

remapResults = true를 정적쿼리에 사용해도 되나 매번 매핑을 사용 하므로 메타데이터를 캐쉬에 저장 할 때 보다는 성능이 약간 저하 될 수 있다.

728x90
반응형