1. 오라클 사용시 ORA-00911: invalid character 에러 발생
  2. 트랜잭션 사용에 관련하여..
  3. argument type mismatch 로 인한 com.ibatis.common.beans.ProbeException: Could not set property 에러

오라클 사용시 ORA-00911: invalid character 에러 발생#

  • 다음처럼 SQL문에서 마지막에 ; <- 를 붙이면 해당 에러가 자주 발생한다. 쿼리문 끝에는 항상 ; 가 오지 않도록 주의한다.
<insert id="insertGuest" parameterMap="guestParam">
  insert into guestboard1(NUM, TITLE, CONTENT, WRITER, PASSWD, WRITEDAY
  values(?,?,?,?,?,?);
</insert>
  • ibatis 메일링리스트에 보면 다음과 같은 검색결과가 나온다.
http://www.mail-archive.com/cgi-bin/htsearch?method=and&format=short&config=ibatis-user-java_incubator_apache_org&restrict=&exclude=&words=ORA-00911

현재는 위 두가지의 방법으로 문제를 해결할수가 있다.

트랜잭션 사용에 관련하여..#

<div class="note"> 알림 : 여기서의 트랜잭션은 DBMS자체의 트랜잭션 보다는 ibatis에서 관리하는 트랜잭션을 언급하고 있다. 여기서 트랜잭션이 안된다고 해서. 단순히 DBMS에서 트랜잭션을 지원하지 못한다고 언급하는 것이 아니다. </div>

ibatis에서 트랜잭션을 사용하기 위해서는 보통 다음과 같은 형태의 소스를 가지게 된다.

        SqlMapClient sqlMap = null;

        try {
            sqlMap = getSqlMapConfig();
            sqlMap.startTransaction();

            .. 작업들.

            sqlMap.commitTransaction();
        catch (Exception e) {
            logger.error(e.getMessage(), e);
        finally {
            sqlMap.endTransaction();
        }

현재(2005년 4월23일 기준) 테스트 된 바로는 MySQL은 4.0 버전(테스트는 4.0.28버전)은 이러한 트랜잭션 관리가 제대로 되지 않는다.. 4.1버전(테스트는 4.1.11버전)은 정상적으로 트랜잭션이 작동한다. 오라클의 경우 10g는 정상적으로 작동한다. 오라클 이전버전은 추후에 테스트해보도록 하겠다. <div class="note">9i에서도 정상작동합니다. by yulisys</div> Postgresql 8.0버전또한 제대로 트랜잭션 작동한다. 물론 Postgresql도 이전버전은 추후에 테스트해보도록 하겠다.

ibatis에서 알려진 바로는 MySQL은 다소 예전 버전에서 트랜잭션이 제대로 작동하지 않고 그외에 다른 DBMS에서는 문제가 없는것으로 알려져있다.

관련 링크는 다음과 같다. http://opensource.atlassian.com/confluence/oss/display/IBATIS/Database+Specific+Information

argument type mismatch 로 인한 com.ibatis.common.beans.ProbeException: Could not set property 에러#

  • 발생 상황

  <!--  message와 user는 1:1관계이므로 
  get-message resultMap에 get-user resultMap정보를 추가적으로 넣어서 확장한다. -->
  <resultMap id="get-message-result" class="message" extends="get-message">
    <result property="user.id" column="user_id"/>
    <result property="user.password" column="password"/>
    <result property="user.nickName" column="nickName"/>
    <!--  message와 comment는 1:M 관계이기 때문에 
    Comment.xml의 getCommentList를 호출해서 Set형태의 값을 반환한다 -->
    <result property="comments" column="id" select="getCommentList"/>
  </resultMap>
위 xml에서 1:M관계를 위해 마지막에 getCommentList를 호출한다. 이때 id라는 칼럼의 값을 인자를 던져주게 되는데

  <select id="getCommentList" parameterClass="int" resultMap="get-comment-result">
  <![CDATA[
  select seq as id,
    content as content,
    log_time as logTime,
    user_id as user,
    message_seq as message
  from comment
  where seq=#value#
  ]]>
  </select>
던져인 인자값은 위의 쿼리문의 #value#에 맵핑된다. 맵핑되는 가운데 타입이 맞지 않으면 argument type mismatch 라는 예외에러를 보게 된다.

  • 해결법

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-1) was last changed on 06-Apr-2006 09:45 by UnknownAuthor