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를 하셔도 됩니다..)
'Programing > Spring' 카테고리의 다른 글
Mybatis Mapper XML <select> 알짜만 빼먹기 (1) | 2019.07.08 |
---|---|
Spring Mybatis 멀티 database 연동 다중, 복수 데이터베이스 연동 oracle, mysql (2) | 2019.03.20 |
Spring task scheduler Cron Expression 크론 표현식 (5) | 2018.06.26 |
Java Spring File Upload MultipartHttpServletRequest 멀티파일 업로드 방법 (0) | 2018.03.13 |
톰캣 에러/경고 메지 관련 (0) | 2018.02.12 |
댓글