하시엔다
30
2022-01-09 22:45:59
4
167

안녕하세요 jpa 문의드립니다


안녕하세요

문의드릴 내용은 insert 할때 마이바티스일 경우 글번호같은 경우에 시퀸스나 자동증가값을 사용하지 않는다면

키에 select max(키)+1  를 select key 에 넣어서 리턴값을 가지고 다른 테이블에도 넣어줬는데


Jpa는 방법이 없는걸까요?  현재 mybatis 와 jpa 같이 쓰고 있는데 위의 내용이 해결이 안돼서 mybatis 에서 max값을 가지고 와서 jpa에 넣어줬는데 뭔가 좀 꺼름직해서요

Jpa는 max+1을 대처할만한게 없는걸까요?

구글링을 몇시간째해봐도 답이 안나와서 ㅜㅜ

답변좀 부탁드립니다

0
  • 답변 4

  • 한국은역시자바
    1k
    2022-01-09 22:55:50

    DBMS마다 PK 생성전략이 다 다릅니다. Oracle은 sequence를 이용하고 MySQL은 AUTO_INCREMENT 방식을 이용합니다. 그리고 JPA에서는 이러한 전략을 다루리 위해 상세하게 기능까지 다 갖춰져 있으니 찾아보시면 됩니다. 굳이 JPA로 MAX+1을 하겠다는거 보다 좀 방향을 바꿔서 생각해보시기 바랍니다.

  • Mambo
    7k
    2022-01-09 23:00:38

    JPA IdentifierGenerator

  • 하시엔다
    30
    2022-01-09 23:49:49

    답변 감사드립니다

    좀더 획기적인걸 찾아봐야겠네요

  • zepinos
    21k
    2022-01-10 02:04:20

    max 를 이용해서 굳이 하겠다면 transaction 을 이용해 row lock 을 걸 수 있는 환경에서 써야 안전합니다. 어짜피 select key 도 내부적으론 미리 쿼리 한 번 더 실행해주는 것일 뿐이구요.


    sequence 를 제공하지 않는 dbms 에서 여러 테이블이 공통으로 한 증가값을 공유해야 한다면 몰라도...max 를 이용한 채번은 끔찍하게 좋지 않은 방법입니다. DBMS 에서 제공하는 기본채번방식을 이용하세요. JPA 는 기본채번방식을 모두 지원합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.