@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "school_id")
private School school;
학생과 학교의 관계를 다대일로 매핑할 때 이렇게 설정했다가 오류 발생.
새로운 학생을 POST 할 때의 문제였는데, 학교 id 칼럼의 PK가 중복되었다는 오류였다.
나의 의도로는 학교가 새로 만들어질 일이 없기에 어떤 일인지 찾아보니, CascadeType.PERSIST
로 하면 연관 관계에 딸린 학교 객체까지 새로 만들어져서 생기는 오류였다.
PERSIST
를 하면 학생이 '새로 만들어질 때' 학교에도 같은 행동을 적용한다. 즉 새로 만들어진다.
그러므로 PERSIST 대신 MERGE
해준다.
@ManyToOne(cascade = CascadeType.MERGE)
이렇게 하면 같은 학생이 존재하는지 조회하고, 또 같은 학교가 존재하는지 조회한 후 없으면 새로 만들고 있으면 기존 것을 이용하게 된다.