Frudy
7k
2019-05-22 17:01:02 작성 2019-05-22 17:43:03 수정됨
1
971

Caused by: java.sql.SQLException: 부적합한 열 유형: 1111 원인, 해결방법


저는 개인블로그가 따로 없어요.

그래서 여기 사이트에 올려보겠습니다.


Caused by: java.sql.SQLException: 부적합한 열 유형: 1111


 >> #{null}이 들어가서 생기는 예외에요.


그래서 원인은 다양하죠.

#{field}

ParaemeterType이 Dto쪽이면, 해당 DTO의 필드에 값이 null인 경우고,

Map쪽이면, map.get("field")했을 때 값이 null인 경우에요.


그래서, DTO라면 field값이 null인 경우로 단정지을 수 있지만,

Map쪽이라면 경우가 2가지로 나뉘어요.


1. 정말 해당 key로 저장된 값이 null인 경우.

2. key를 오타낸 경우 당연히 해당 key로 저장하지않아서 null인경우

두가지가 있게되요.


parameterType = "java.util.Map"

#{code} 대신에 #{code2} 이렇게 오타내는 경우를 말해요.


만약, parameterType = "...DTO"인대 #{code2}로 오타를 낸다면?

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'code2'

이렇게 그런 getter없다고 친절하게 안내해줘요.


>> DTO라면 왜 그 필드에 null이 들어갔는지,

>> Map이라면, 오타를 냈는지 혹은 그 key에 null이 들어갔는지를 찍어보면 알 수 있어요.


해결방법)

1. null을 집어넣지 않는다. (DB 컬럼이 not null인 경우)

2.  #{grade, jdbcType=NVARCHAR} 이런식으로 jdbcType을 설정한다. (DB컬럼이 null 허용인 경우)

(https://krespo.net/163 참고)


추가 정보)

저 예외랑 항상 짝꿍처럼 같이뜨는 예외가

Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType OTHER


저기서 뜨는 # 이건,

insert into table_name(column1, column2) values(#{value1}, #{value2} ..... 

몇번 째의 #{}에서 null이 들어갔는지를 알려주구요,


Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='code',

심지어 이렇게 null이 들어간 속성이름까지 알려주네요.


참고하시면 좋을거같아요.

잘못된 정보의 지적 감사히받겠습니다.


구글에 위와같은 에러로 검색하면 이 글이 검색되겠네요 ㅋㅋㅋㅋ

0