개요
Spring JPA를 사용하여 개발을 진행하다 cascade = CascadeType.ALL과 orphanRemoval = true에 대한 예시를 많이 봐왔다. 연관관계를 갖는 엔티티 간 설정하는 것이라 들었고, 무엇인가 삭제했을 때 연쇄적으로 쉽게 삭제해준다고 막연하게 알고 있었다. 하지만 이를 남용하기엔 '삭제'와 관련 되어 있어 위험하다 판단 되어 제대로 찾아보기로 했다.
본문
Cascade.ALL은 PERSIST, MERGE, REMOVE, REFRESH, DETACH와 같은 상태 변환를 관리한다. 즉, 수정, 삭제, 추가의 작업이 일어날 때 연쇄적으로 관계를 갖는 엔티티에 영향을 주는 것이다.
orphanRemoval은 부모, 자식을 가질 때 부모와의 관계가 끊어졌을 때 자식을 삭제하는 것이다. 가장 대표적인 것이 부모가 삭제 되었을 떄이다. 그러나 Cascade.ALL과 다른 점은 자식의 외래키에 변경이 있을 때 부모와의 관계가 끊어진 것이라서 그 경우에도 자식을 삭제한다. 삭제만 일어나는 상황에서는 둘이 같은 결과를 나타낸다.
'Spring' 카테고리의 다른 글
Spring과 로컬 DB 연결 시 application.properties의 변수의 값을 할당할 때 따옴표(quote) 작성 시 주의할 점 (0) | 2024.02.14 |
---|---|
단위 테스트와 통합 테스트 (0) | 2024.01.25 |
Service 객체의 책임과 Facade 디자인 패턴 (2) | 2024.01.23 |
개요
Spring JPA를 사용하여 개발을 진행하다 cascade = CascadeType.ALL과 orphanRemoval = true에 대한 예시를 많이 봐왔다. 연관관계를 갖는 엔티티 간 설정하는 것이라 들었고, 무엇인가 삭제했을 때 연쇄적으로 쉽게 삭제해준다고 막연하게 알고 있었다. 하지만 이를 남용하기엔 '삭제'와 관련 되어 있어 위험하다 판단 되어 제대로 찾아보기로 했다.
본문
Cascade.ALL은 PERSIST, MERGE, REMOVE, REFRESH, DETACH와 같은 상태 변환를 관리한다. 즉, 수정, 삭제, 추가의 작업이 일어날 때 연쇄적으로 관계를 갖는 엔티티에 영향을 주는 것이다.
orphanRemoval은 부모, 자식을 가질 때 부모와의 관계가 끊어졌을 때 자식을 삭제하는 것이다. 가장 대표적인 것이 부모가 삭제 되었을 떄이다. 그러나 Cascade.ALL과 다른 점은 자식의 외래키에 변경이 있을 때 부모와의 관계가 끊어진 것이라서 그 경우에도 자식을 삭제한다. 삭제만 일어나는 상황에서는 둘이 같은 결과를 나타낸다.
'Spring' 카테고리의 다른 글
Spring과 로컬 DB 연결 시 application.properties의 변수의 값을 할당할 때 따옴표(quote) 작성 시 주의할 점 (0) | 2024.02.14 |
---|---|
단위 테스트와 통합 테스트 (0) | 2024.01.25 |
Service 객체의 책임과 Facade 디자인 패턴 (2) | 2024.01.23 |