Programing/Spring

Mybatis Oracle Sequence 사용시 주의점

리커니 2019. 3. 4. 12:32
반응형

Mybatis Oracle Sequence 사용시 주의점

 

자동증가 시켜야 되는 컬럼 사용 시 Max값+1을 사용하지 않기 위해
오라클에 시퀀스를 생성하고 (Myseql은 auto_increasement)
Mybatis 의 selectKey 태그를 사용하여 해당 값을 VO 객체 변수에 받아오게 됩니다.

Link : mybatis selectkey 사용법 생성한 키값 리턴받기

 

mybatis selectkey 사용법 생성한 키값 리턴받기.

mybatis selectkey 사용법 생성한 키값 리턴받기. update나 insert 시 키값을 리턴 받는 방법을 알아보도록 하겠습니다. 예제를 보도록 하죠. 1 2 3 4 5 6 7 8 9 10                        ..

aljjabaegi.tistory.com



위와같이 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를 하셔도 됩니다..)

반응형