iBaits에서 dynamic tag 사용시 typeHandler처리 관련 문의
- 작성자 :
- 전*성
- 작성일 :
- 2010-07-05 20:44:19
- 조회수 :
- 3,193
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
사실 아래에 한번 적었는데 다시 적네요,
문제는 dynamic tag에서 typeHandler이 적용이 돼지 않는 것 입니다.
먼저 parameterMap에 typeHandler을 정의했습니다.
그 상태로 dynamic tag를 사용하서 쿼리를 생성해서 수행 했을 때 설정한 customTypeHandler가 처리 돼지 않는 것을 확인했구요 debugging한 결과 jdbcType과 javaType가 setting 안됀걸 확인 할 수 있었습니다. 어떤 분께서 inline parametermap를 사용하면 된다고 하셔서 inline으로 처리 해서 jdbcType과 javaType가 세팅된것을 확인할 수 있었습니다. 근데 jdbcType와 javaType가 setting되었음에도 불구하고, typeHandler을 처리하지 못하고 있습니다.
source trace한 결과, dynamicTag를 사용할 경우는 typeHandler을 구하지 못하도록 iBatis에서 처리 한 것으로 확인 돼었습니다.
https://issues.apache.org/jira/browse/IBATIS-568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12689607#action_12689607
이 자료 참고 하시면 될 것 같습니다.
InlineParameterMapParser.java입니다.
if (mapping.getTypeHandler() == null) {
TypeHandler handler;
if (parameterClass == null) {
handler = typeHandlerFactory.getUnkownTypeHandler();
} else {
handler = resolveTypeHandler(typeHandlerFactory, parameterClass, mapping.getPropertyName(), mapping.getJavaTypeName(), mapping.getJdbcTypeName());
}
mapping.setTypeHandler(handler);
}
이부분 입니다. typeHandler 를 구할려면 parameterClass가 null이 아닌 값이 넘어와야 하는데 dynamic tag(isPropertyAvailable, iterate, dynamic, ...)일 경우 내부적으로 null로 setting되는 것을 확인할 수 있었습니다. 이런 경우 어떻게 처리 해야 할까요?
문제는 dynamic tag에서 typeHandler이 적용이 돼지 않는 것 입니다.
먼저 parameterMap에 typeHandler을 정의했습니다.
그 상태로 dynamic tag를 사용하서 쿼리를 생성해서 수행 했을 때 설정한 customTypeHandler가 처리 돼지 않는 것을 확인했구요 debugging한 결과 jdbcType과 javaType가 setting 안됀걸 확인 할 수 있었습니다. 어떤 분께서 inline parametermap를 사용하면 된다고 하셔서 inline으로 처리 해서 jdbcType과 javaType가 세팅된것을 확인할 수 있었습니다. 근데 jdbcType와 javaType가 setting되었음에도 불구하고, typeHandler을 처리하지 못하고 있습니다.
source trace한 결과, dynamicTag를 사용할 경우는 typeHandler을 구하지 못하도록 iBatis에서 처리 한 것으로 확인 돼었습니다.
https://issues.apache.org/jira/browse/IBATIS-568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12689607#action_12689607
이 자료 참고 하시면 될 것 같습니다.
InlineParameterMapParser.java입니다.
if (mapping.getTypeHandler() == null) {
TypeHandler handler;
if (parameterClass == null) {
handler = typeHandlerFactory.getUnkownTypeHandler();
} else {
handler = resolveTypeHandler(typeHandlerFactory, parameterClass, mapping.getPropertyName(), mapping.getJavaTypeName(), mapping.getJdbcTypeName());
}
mapping.setTypeHandler(handler);
}
이부분 입니다. typeHandler 를 구할려면 parameterClass가 null이 아닌 값이 넘어와야 하는데 dynamic tag(isPropertyAvailable, iterate, dynamic, ...)일 경우 내부적으로 null로 setting되는 것을 확인할 수 있었습니다. 이런 경우 어떻게 처리 해야 할까요?
A
안녕하세요.. 전우성님..
해당 답변은 이전 질문에 답변을 드렸습니다.
요약해 드리면..
해당 issue는 아직 iBatis쪽에서 해결되지 않았기 때문에 .. inline 방식의 typeHandler는 사용하실 수 없을 것 같습니다.
따라서 parameterMap 이나 resultMap을 통해 typeHandler를 등록하여 사용하면 됩니다.
이렇게 답변을 드렸는데.. 굳이 inline 방식만을 적용하셔야 하는 이유는 없을 것 같습니다.
그럼.. 즐거운 하루 되십시오.
감사합니다.
해당 답변은 이전 질문에 답변을 드렸습니다.
요약해 드리면..
해당 issue는 아직 iBatis쪽에서 해결되지 않았기 때문에 .. inline 방식의 typeHandler는 사용하실 수 없을 것 같습니다.
따라서 parameterMap 이나 resultMap을 통해 typeHandler를 등록하여 사용하면 됩니다.
이렇게 답변을 드렸는데.. 굳이 inline 방식만을 적용하셔야 하는 이유는 없을 것 같습니다.
그럼.. 즐거운 하루 되십시오.
감사합니다.