- CascadeType ALL 속성을 주고 테스트코드를 작성하는 과정에서 이런 예외가 발생했다..!
- 같은 객체(부모)를 참조하고 있는 서로 다른 두 개의 객체(자식)를 save(persist)하는 부분에서 에러가 발생했었다.

- 만약 A클래스와 B클래스가 연관관계에 놓여있고 B라는 테이블에는 A를 참조한 추가 데이터가 들어있는 구조일 경우 A 클래스에는 있을 수 있지만 B 클래스에서 필요 없는 내용이 있는 경우이다.
- A클래스에 있는 모든 내용을 적용한다는 내용인데 지금과 같은 상황에서는 어울리지 않다.
CascadeType의 종류
- PERSIST : 엔티티를 생성하고, 연관 엔티티를 추가하였을 때 persist()를 수행하면 연관 엔티티도 함께 persist가 수행된다. 만약 연관관계 엔티티가 DB에 등록된 키값을 가지고 있따면 detached entity passed to persist Exception예외가 발생함
- MERGE : 트랜잭션이 종료되고 detach 상태에서 연관 엔티티를 추가하거나 변경된 이후에 부모 엔티티가 merge()를 수행하게 되면 변경사항이 적용된다.(연관 엔티티의 추가 및 수정 모두 반영된다.)
- REMOVE : 삭제 시 연관된 엔티티도 같이 삭제된다.
- DETACH : 부모 엔티티가 detach()를 수행하게 되면, 연관된 엔티티도 detach() 상태가 되어 변경사항이 반영되지 않는다.
- ALL : 모든 Cascade 적용함
JPA Life Cycle은 특이하게 Cascade.ALL 옵션을 준 경우 save를 수행하면 자식 객체에서 참조하고 있는 부모객체가 detach되는 구조로 라이프 사이클이 이루어지고 있다. 따라서 MERGE를 적용하면 A 클래스 내용이 변질될 가능성이 있어 위험요소가 존재한다.