취뽀몽

[Error] Mapped Statements collection already contains value for ~ 본문

오류

[Error] Mapped Statements collection already contains value for ~

허몽구 2023. 6. 6. 22:06

Mybatis 를 사용하여 API 개발을 할 때,

Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for ~

오류가 발생했다.

 

원인은 여러가지가 있을 수 있는데,

1. mapper id가 잘못된 경우

2. 파라미터와 bean의 필드명이 상이한 경우

3. 쿼리 xml에 정의된 namespace와 DAO에서 호출하는 namespace가 다른 경우

4. mapper가 정의되어 있지 않거나 철자가 잘못된 경우

5. mapper에 정의된 namespace 명칭이 같은 애플리케이션 내에 중복될 경우

 

이외 다른 경우도 있지만, 주로 위와 같은 원인으로 발생한다.


나는 쿼리 xml 내에 같은 id가 2개 존재하여, id 하나의 명칭을 변경해주었더니 에러가 발생하지 않았다.

 

<select id="selectMember" parameterType="memberDto">
    SELECT ID, NAME, AGE
    WHERE ID = #{id}
</select>

<select id="selectMember" parameterType="memberDto">
    SELECT NAME
    WHERE ID = #{id}
</select>

 

위와 같이 같은 id가 중복으로 존재할 경우, 쿼리 내의 내용과 관계 없이 해당 오류가 발생한다. 

무작정 복붙해서 쿼리 수정하려고 했는데 오류가 나서 당황했다 ㅎ.ㅎ