Post

Spring data jdbc에서 ID 미리 채번하는 경우 (save / insert / update)

Spring data jdbc에서 save와 insert/update

save(Entity)의 기본 동작

  • id 필드가 비어있을 때 : id가 DB에서 자동으로 채번이 될거라는 가정하에 (AUTO_INCREMENT 같은걸로) id 없이 INSERT 날린다.
  • id 필드가 채워져 있을 때 : 해당 id 기준으로 UPDATE 날린다.
  • 하지만 DB에서 id가 자동 채번 되도록 세팅이 안되어있거나, 항상 DB 외부에서 채번하도록 되어있는 경우라면?
    • id 필드가 채워져 있으니 UPDATE 날리지만, DB에는 해당 row가 없어 에러가 발생한다.
    • 보통 id는 미리 채번해야 추적이 쉬워서, INSERT하기 전 미리 채번하는 경우가 대부분이다.

해결 방안?

https://spring.io/blog/2021/09/09/spring-data-jdbc-how-to-use-custom-id-generation 참고

  1. save 말고 insert/update를 쓴다. (JdbcAggregateOperations, JdbcAggregateTemplate)
  2. @Version 사용한다
  3. interface Persistable를 구현하고 getId와 isNew를 구현해서 id가 존재해도 새 아이템임을 표시한다.
  4. id를 미리 지정하지 말고 자연스럽게 지정이 될 수 있도록 한다. callback.
This post is licensed under CC BY 4.0 by the author.