ljho1001
84
2020-03-16 15:35:35
7
268

[MyBatis] 하나의 서비스에서 여러테이블에 INSERT시


한 서비스에서 테이블 A, B, C에 INSERT를 시킨다고 가정할때,

A 테이블에 INSERT시, <SELECT KEY>에 SEQUENCE 함수(SEQ_함수명.NEXTVAL)를 사용해서 PK를 채번하고 INSERT한 뒤 그 채번한 PK를 자바단(ServiceImpl)에서 변수에 담아주고 다음 B와 C테이블에 INSERT할 때 넣어주는 구조로 개발을 했는데요. 이렇게 할 필요없이 테이블 B와 C에 INSERT하는 쿼리에 SEQ_함수명.CURRVAL를 써줘도 상관없나요?

0
0
  • 답변 7

  • 이설란
    3k
    2020-03-16 15:40:34

    음...왠지 문제가 생길 것 같기도 한데요..

    이유는 DB에서 생성하는 시퀀스가...반드시 현재라는 보장이 없을 것 같아서요.

    여러사람이 동시에 실행했다고 했을 때 시퀀스를 생성하고 CURRVAL를 실행했을 때

    반드시 해상 시퀀스라는 보장이 없을 것 같아서요.

    1
  • ljho1001
    84
    2020-03-16 15:42:29

    그럼 제가 개발한 방식대로 가면 될까요?

    0
  • 이설란
    3k
    2020-03-16 15:45:18

    글쓴이님께서 생각하신대로 SELECT KEY 채번한걸 담으셔도 되고


    select 시퀀스.val from dual;

    이런식으로 먼저 시퀀스를 생성하는걸 조회한 이후 변수에 담아서 재사용하는 경우도 있어요.


    1
  • ljho1001
    84
    2020-03-16 15:46:47

    많은 도움이 되었습니다 감사합니다

    0
  • 1
  • 훅인더훅
    457
    2020-03-16 16:21:43

    mysql을 사용하신다면 프로시져를 이용해 insert 이후 last_insert_id() 를 리턴받아 사용해도 되고요.

    1
  • ljho1001
    84
    2020-03-16 16:31:46
    추가 답변 감사드립니다 많은 도움이 되었습니다.
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.