Mybatis Oracle Sequence 사용시 주의점
Mybatis Oracle Sequence 사용시 주의점
자동증가 시켜야 되는 컬럼 사용 시 Max값+1을 사용하지 않기 위해
오라클에 시퀀스를 생성하고 (Myseql은 auto_increasement)
Mybatis 의 selectKey 태그를 사용하여 해당 값을 VO 객체 변수에 받아오게 됩니다.
Link : mybatis selectkey 사용법 생성한 키값 리턴받기
위와같이 Mybatis에서 오라클의 Sequence 값에 접근하는 경우(CURRVAL, NEXTVAL)
selectKey 태그가 없으면 아래와 같은 에러를 발생시킵니다.
Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException
생성된 키를 얻는데 혹은 결과를 파라메터 오브젝트에 세팅하는데 실패했다 라는 에러 입니다.
기본적으로 Mybatis 쪽에서 Oracle Sequence에 접근하는 경우 그 결과를 SelectKey로 받도록
기본 설정이 되어 있는 것 같습니다.
(이는 자동생성된 값을 set한 객체도 동일하게 적용)
그래서 Sequence를 사용하는 Insert 태그 내에서는 SelectKey 태그가 있어야 되는다는 말인데,
useGeneratedKeys="false" 옵션을 주게 되면,
selectKey 태그가 없어도 위와같은 에러를 발생시키지 않게됩니다.
생성된 키를 사용하지 않겠다. 시퀀스에 접근하든말든 알아서 해라 뭐 이런 의미가 되겠네요.
예를들어 3개의 로직이 연결된 하나의 로직이 있다고 하면,
로직1을 Insert 한후 키를 받아 로직 2에 저장해야되는 경우
로직2에는 생성된 키를 리턴할 필요가 없으므로 selectKey태그 없이 useGeneratedKeys="false" 옵션을 주시면 됩니다.
(확인용도로 selectKey를 하셔도 됩니다..)