[ibatis]동적 컬럼 생성시 컬럼정보를 제대로 가져오지 못하는 현상
개발/Java2009. 11. 12. 10:19
이번에 프로젝트를 하면서 동일한 성격의 테이블이 여러개라 하나의 쿼리를 두고 테이블 명과 몇가지 다른 컬럼에 대해서는 동적으로 생성해서 가져오게 했다..
하지만 몇번 재대로 실행이 되는가 싶더니 테스트 진행 과정에서 컬럼을 가져오지 못하는 현상이 발생했다.
일단은 혹시나 모를 문제가 있지 않을까 해서 쿼리를 분리하고 동적으로 생성되어야 되는 부분은 쿼리를 따로 작성해서 select 하도록 하였다.
후에 이 문제에 대해서 살펴봤더니 원인은 ibatis가 매핑 정보를 캐싱하기 때문이라고 한다.
이문제를 해결하려면 다음과 같이 사용할수가 있다.
다음 코드는 일반적으로 같은 내용을 담고 있지만 photo_gallery 테이블인 경우는 image_name, image_path, image_size 컬럼을 동적으로 생성해서 가져오는 쿼리이다.
일반적으로는 파일 테이블을 따로 두겠지만 예제를 설명하기 위해서 위와 같이 하였다..
위에 테이블에서 remapResults="true" 부분이 없을 경우 위에서 설명한 에러가 발생할수가 있다 하지만 이부분을 넣어 주면서 쿼리를 가져올때 매번 새로 생성한 쿼리를 가져오기 때문에 다음부터는 동적으로 컬럼을 가져오면서 발생한 에러를 해결 할 수가 있다.
하지만 몇번 재대로 실행이 되는가 싶더니 테스트 진행 과정에서 컬럼을 가져오지 못하는 현상이 발생했다.
일단은 혹시나 모를 문제가 있지 않을까 해서 쿼리를 분리하고 동적으로 생성되어야 되는 부분은 쿼리를 따로 작성해서 select 하도록 하였다.
후에 이 문제에 대해서 살펴봤더니 원인은 ibatis가 매핑 정보를 캐싱하기 때문이라고 한다.
이문제를 해결하려면 다음과 같이 사용할수가 있다.
<select id="select" remapResults="true" parameterClass="dataMap" resultClass="dataMap">
SELECT
bbs_seq
,title
,contents
,register_date
<isEqual property="table" compareValue="photo_gallery">
,image_name
,image_path
,image_size
</isEqual>
FROM $table$
<include refid="globalWhere" />
</select>
SELECT
bbs_seq
,title
,contents
,register_date
<isEqual property="table" compareValue="photo_gallery">
,image_name
,image_path
,image_size
</isEqual>
FROM $table$
<include refid="globalWhere" />
</select>
다음 코드는 일반적으로 같은 내용을 담고 있지만 photo_gallery 테이블인 경우는 image_name, image_path, image_size 컬럼을 동적으로 생성해서 가져오는 쿼리이다.
일반적으로는 파일 테이블을 따로 두겠지만 예제를 설명하기 위해서 위와 같이 하였다..
위에 테이블에서 remapResults="true" 부분이 없을 경우 위에서 설명한 에러가 발생할수가 있다 하지만 이부분을 넣어 주면서 쿼리를 가져올때 매번 새로 생성한 쿼리를 가져오기 때문에 다음부터는 동적으로 컬럼을 가져오면서 발생한 에러를 해결 할 수가 있다.
'개발 > Java' 카테고리의 다른 글
[java] 저장소 정보 확인 (0) | 2009.11.24 |
---|---|
자주 쓰는 Maven 설정 정리 (0) | 2009.11.16 |
JSONObject를 이용한 json 사용하기 (0) | 2009.11.04 |
ckeditor 이미지 업로드시 반환 리턴값 보내기 (0) | 2009.10.26 |
ibatis 로그 남기기 (0) | 2009.10.08 |