응 괜찮아,

08. [오류] Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for ~ 본문

IT/Spring

08. [오류] Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for ~

응 괜찮아, 2021. 4. 13. 00:41
728x90

오류내용

Tomcat을 실행시켰을 때 아래와 같은 오류 발생했다.

Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.mkmall.www.mapper.UserMapper.insertUser

 

확인내용

구글링해서 찾아보았을 때 크게 아래 두 가지 이유로 오류가 발생할 수 있다고 한다.

1. ~Mapper.xml에 정의된 sql들 가운데 id가 동일한 sql이 존재할 경우
2. sql의 parameterType 속성 등이 잘못 정의되어 있을 경우

그러나 프로젝트 내에서 동일한 id를 가진 sql은 없었고 sql의 parameterType 속성도 정상적으로 정의되어 있었다.

그래서 조금 더 깊숙히 파헤쳐보니 root-context.xml에 문제가 있었다. 아래 코드와 같이 Mapper를 이미 포함시켰는데 또 포함시키려고 해서 동일한 sql이 존재한다고 인식한 것!

<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="configLocation" value="classpath:/mybatis-config.xml"/>
	<property name="mapperLocations" value="classpath*:/mapper/*Mapper.xml"/>
</bean>

 

조치내용

Mapper 포함시키는 부분 중 한 군데를 주석 처리하여 조치하였다.

<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="configLocation" value="classpath:/mybatis-config.xml"/>
	<!-- <property name="mapperLocations" value="classpath*:/mapper/*Mapper.xml"/> -->
</bean>

 

728x90
Comments