스프링 프레임워크(Spring Framework)

[스프링,MyBatis] java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String

xemaker 2018. 5. 30. 14:23
[스프링,MyBatis] java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String 

아 테스트할때 에러가 안나서 잘 되는지 알았는데 나중에 알고 보니 null을 리턴해서 되는 거였다. 

하지만 제대로 String 값이 있을 경우는 

java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String 

이런 에러가 났었다. 

흠.. 제대로 코딩, 확인, 테스트 안하고 했을때는 이런 예상치 못한 재앙(?)이 올 수 있다.

MyBatis 코딩할 시 그냥 기존거 복사해서 했더니 제대로 resultType을 못봐서.. ㅜㅜ 

<select id="getXX" resultType="Map"> 
을 
<select id="getXX" resultType="String"> 

이렇게 써주니까 될줄 알았는데.. 안됐다.. 

별 삽질을 다 해봤다. 이상하다.. 기존에  

<select id="getXX" resultType="String"> 

이렇게 쓴것도 있는데 왜 안되지.. 

그래서 그냥  

<select id="getXX" resultType="Map"> 

이렇게 써야 하나 생각하다가 

<select id="getXX" resultType="java.lang.String"> 

이렇게 하니까 되었다. 

java.lang을 붙여줘야 하나.. 아니 기존에 String만 쓴것도 있는데.. 

다시 

<select id="getXX" resultType="String"> 

이렇게 하니까 이제야 되었다. 

흠.. 

뭔가 이클립스에서 갱신이 잘 안되었던것 같다. 

이클립스를 껏다가 켜봤는데도 안되던데... 

클린(Clean)을 한번 해볼걸 그랬나... 


여기서 갑자기 드는 생각이 resultType을 안넣어도 되나? 하는 의문이 들어 해봤다. 

org.mybatis.spring.MyBatisSystemExeption: nested exception is org.apache.ibatis.executor.ExecutorException: 

A query was run and no Result Maps were found for the Mapped Statement 'com.xx.xxx'. 

It's likely that neither a Result Type nor a Result Map was specified. 

에러메시지에 답이 나와 있다. 

Result Type 이나 Result Map이 없는것 같아 보인다. 

결론은 select 에서는 Result Type 이나 Result Map은 반드시 써야 하는것 같다.