게시글 테이블(Post)의 id 값 JPA에서 생성전략을 IDENTITY로 설정해 두었고,
실제 MySQL에 테이블 생성 이후, auto_increment로 설정이 되어있는 것도 확인을 했다.
근데 사용자가 게시글을 작성한 이후에 두 번째 게시글을 작성하려 하니 자꾸 duplicated entry 오류를 뱉었다.
게시글 작성 로직이었기에 매번 Post 객체를 새로 생성해서 영속성 캐싱 문제일 확률도 없을 텐데 혹시 몰라 save() 이후에 flush()도 해보고 auto_increment도 수동으로 설정해 보고 별짓을 다 했다.
아래는 문제의 소스코드
(이상한 점을 눈치챈 사람이 있나요?)
duplicated entry 오류가 발생하던 부분이 알고보니 기본키가 아니라 user_id 외래키가 1대 1로 매핑되어 있었어서 unique 제약이 걸리기에 그냥 동일 사용자의 게시글이 더 이상 작성되지 않던 것이었다.
저거를 무슨 정신에 @OneToOne으로 적었는지는 모르지만 @ManyToOne으로 변경하고 해결..
stackoverflow에도 질문하고 엄한 gpt 붙잡고 해결하려했는데 해결이 안 되던 이유가 있었구나..
로그에서 duplicated entry '1' 이부분만 보고 판단했는데 뒤에 속성값까지 알려주던 부분까지 꼼꼼하게 읽어봤으면 쉽게 해결할 수 있었을 텐데..
오늘의 교훈
콘솔에서 찍어주는 로그를 대충 보지 말고 뒤까지 꼼꼼하게 읽자..
오류 잡을 때 너무 시야가 좁아지지 말자..