jquery ajax 로 spring 과 통신하여 데이터를 전송하고 mybatis annotation 으로 Oracle DB의 데이터를 받을때
List<Map<String, Object>> 으로 받았다.
그런데
HTTP Status 500 - Could not write content: Direct self-reference leading to cycle (through reference chain: java.util.ArrayList[0]->java.util.HashMap["RPL_CONTENT"]->oracle.sql.CLOB["dbaccess"]->oracle.jdbc.driver.T4CConnection["wrapper"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference leading to cycle (through reference chain: java.util.ArrayList[0]->java.util.HashMap["RPL_CONTENT"]->oracle.sql.CLOB["dbaccess"]->oracle.jdbc.driver.T4CConnection["wrapper"])
DB의 RPL_CONTENT 컬럼의 타입이 CLOB 라서 제대로 받아지지 않았다.
구글링을 해보니
1. DB에서 컬럼의 타입을 VARCHAR2로 바꿔서 받는 방법
http://dev4u.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-CLOB-VARCHAR%EB%A1%9C-%EB%B3%80%ED%99%98
2. JAVA에서 CLOB을 String 으로 변환하는 방법
http://thebad.tistory.com/entry/HashMap-%EC%9D%84-%ED%86%B5%ED%95%98%EC%97%AC-Clob-%EB%A5%BC-%EB%B0%9B%EC%9D%84-%EA%B2%BD%EC%9A%B0-String-%EC%9C%BC%EB%A1%9C-%EB%B3%80%ED%99%98
이 나오는데 내 상황은 Mybatis Annotation 으로 DB에 Query문을 날리는거라 1번 밖에 답이 없었으나 DB 데이터를 건들기는 싫었다. 그래서 Mybatis 공식 문서를 찾아보니 Results 와 Result 를 사용해서 XML 형식처럼 해당 결과값 컬럼의JdbcType 과 JavaType 을 선언해줄수 있는걸 발견했다.
그래서
@Results(id = "결과값ID", value = {
...
@Result(property = "Map안에 저장될 키값", column = "해당 컬럼명", jdbcType = JdbcType.CLOB, javaType = String.class),
...
})
으로 하니 오류없이 제대로 Map안에 저장해서 사용할수 있었다.
결국 키포인트는 Mybatis Annotation 방식에서 Results 와 Result 를 사용하는 방법.
'IT > MyBatis' 카테고리의 다른 글
Mybatis 에서 if문 사용하기 (0) | 2018.09.14 |
---|---|
SelectKey를 Select구문의 if안에서 쓸수 있을까? (0) | 2018.09.14 |