[JPA] CascadeType.MERGE

해질녘·2022년 8월 7일
0

Spring, JPA

목록 보기
6/10
  • 정확한 지식 아닐 수도 있음 ㅎ..

문제

 	@ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "school_id")
    private School school;

학생학교의 관계를 다대일로 매핑할 때 이렇게 설정했다가 오류 발생.

새로운 학생을 POST 할 때의 문제였는데, 학교 id 칼럼의 PK가 중복되었다는 오류였다.

나의 의도로는 학교가 새로 만들어질 일이 없기에 어떤 일인지 찾아보니, CascadeType.PERSIST로 하면 연관 관계에 딸린 학교 객체까지 새로 만들어져서 생기는 오류였다.

PERSIST를 하면 학생이 '새로 만들어질 때' 학교에도 같은 행동을 적용한다. 즉 새로 만들어진다.

그러므로 PERSIST 대신 MERGE 해준다.


@ManyToOne(cascade = CascadeType.MERGE)

이렇게 하면 같은 학생이 존재하는지 조회하고, 또 같은 학교가 존재하는지 조회한 후 없으면 새로 만들고 있으면 기존 것을 이용하게 된다.

0개의 댓글