반응형

IBatis를 MyBatis로 바꾸면서 톰캣 WAS를 켤 때마다 xml 에러가 계속 발생하고 있다. 그 중에서도 Result Maps collection already contains value for Common.UserMap  이 에러가 발생한다.

 

Result Maps collection already contains value for Common.UserMap.

Result Maps collection already contains value for Common.UserMap

 

이 문제는 mapper를 parse하여 읽어오는데, 여기서 기존에 mapper space와 쿼리문 id가 같은 파일이 여러 개가 있으면 문제가 발생한다.

즉, A라는 XML 파일의 namespace는 A1이고, B라는 XML 파일의 namespace도 A1이다. 근데, 그 안에 있는 쿼리문 ID가 둘 다 B1인 경우 이미 있는 것을 또 가져오니 위의 문제가 발생한다.

 

현재 프로젝트의 구조는 아래와 같이 되어 있다.

한 패키지 안에 이름은 같은데 뒤의 _oracle, _Tibero만 다르다.

즉, 위에서 말했던 것처럼 namespace도 같고, 쿼리 ID도 같다. 이러니 저런 문제가 발생한다.

위의 해결 방법은 oracle과 tibero의 패키지를 분리해주는 것이다.

 

 

위와 같이, mybatis 안에서도 각 db에 따라 oracle, tibero, mssql 등 분리를 해준다.

 

그리고 나서, context.xml에서 mapperLocations를 설정한다.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
	<property name="mapperLocations">
		<list>
			<value>classpath:/mybatis/tibero/*.xml</value>
			<value>classpath:/mybatis/tibero/**/*.xml</value>
			<value>classpath:/mybatis/tibero/**/**/*.xml</value>
		</list>
	</property>
	<property name="configLocation" value="/WEB-INF/conf/mybatis/mybatis-config.xml"/>
</bean>

 

위의 경우, mapperLocations라는 property의 value에 tibero의 경우 변수를 넣을 수 있다.

아래와 같이, 프로퍼티를 관리하는 소스에서 jdbc.db를 던져주면 그 값에 따른 xml 경로를 읽는다.

 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
	<property name="mapperLocations">
		<list>
			<value>classpath:/mybatis/${jdbc.db}/*.xml</value>
			<value>classpath:/mybatis/${jdbc.db}/**/*.xml</value>
			<value>classpath:/mybatis/${jdbc.db}/**/**/*.xml</value>
		</list>
	</property>
	<property name="configLocation" value="/WEB-INF/conf/mybatis/mybatis-config.xml"/>
</bean>

 

이렇게 하니 해결되었다.

반응형

'IT > 이클립스(Eclipse)' 카테고리의 다른 글

[이클립스/Eclipse] 이클립스(Eclipse) 기존 프로젝트 SVN 변경하는 방법  (0) 2023.02.01
[이클립스/Eclipse] 이클립스(Eclipse) 정보: 프로덕션 환경들에서 최적의 성능을 제공하는, APR 기반 Apache Tomcat Native 라이브러리가, 다음 java.library.path에서 발견되지 않습니다 문제 해결 방법  (0) 2022.12.14
[이클립스/Eclipse] 이클립스(Eclipse) Target runtime jdk1.7.0_75 is not defined. 문제 해결 방법  (2) 2022.11.25
[이클립스/Eclipse] 이클립스(Eclipse) Attribute "type" is required and must be specified for element type "resultMap". 문제 해결 방법  (0) 2022.11.23
[이클립스/Eclipse] 이클립스(Eclipse) More than one fragment with the name [spring_web] was found. This is not legal with relative ordering. See section 8.2.2 2c of the Servlet specification for details. Consider using absolute ordering. 문제 ..  (0) 2022.11.17
[이클립스/Eclipse] 이클립스(Eclipse) Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin:3.5.1:testCompile (execution: default-testCompile, phase: test-compile) 문제 해결 방법  (0) 2022.11.16
[이클립스/Eclipse] 이클립스(Eclipse) Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (execution: default-compile, phase: compile) 문제 해결 방법  (0) 2022.11.16
[이클립스/Eclipse] 이클립스(Eclipse) Project configuration is not up-to-date with pom.xml. Select: Maven->Update Project... from the project context menu or use Quick Fix. 문제 해결 방법  (0) 2022.11.08
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기