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하기 전 미리 채번하는 경우가 대부분이다.
- id 필드가 채워져 있으니
해결 방안?
https://spring.io/blog/2021/09/09/spring-data-jdbc-how-to-use-custom-id-generation 참고
- save 말고 insert/update를 쓴다. (
JdbcAggregateOperations
,JdbcAggregateTemplate
) @Version
사용한다- interface Persistable를 구현하고 getId와 isNew를 구현해서 id가 존재해도 새 아이템임을 표시한다.
- id를 미리 지정하지 말고 자연스럽게 지정이 될 수 있도록 한다. callback.
This post is licensed under CC BY 4.0 by the author.