728x90
영속성 전이
- 특정 엔티티를 영속 상태로 만들 경우 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용
- 예를 들자면 부모엔티티를 저장할 경우 자식엔티티도 함께 저장 (자식의 연관관계가 두개 이상인 경우 사용하면 안됨)
영속성 전이 옵션
옵션 | 설명 |
CascadeType.ALL | 모두 적용 |
CascadeType.PERSIST | 영속 |
CascadeType.MERGE | 병합 |
CascadeType.REMOVE | 삭제 |
CascadeType.REFRESH | 리프레쉬 |
CascadeType.DETACH | DETACH |
- 실무에서는 보통 ALL / PERSIST / REMOVE 옵션을 사용
Persist 옵션
@Entity
@Getter
@Setter
public class Parent {
@Id
@GeneratedValue
@Column(name = "parent_id")
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
private List<Child> childs = new ArrayList<>();
public void addChild(Child child) {
this.childs.add(child);
child.setParent(this);
}
}
@Entity
@Getter
@Setter
public class Child {
@Id
@GeneratedValue
@Column(name = "child_id")
private Long id;
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
}
- Parent가 Child를 관리가 가능하도록 Persist 옵션을 줌
Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);
entityManager.persist(parent);
entityTransaction.commit();
// Persist옵션이 없는 경우 아래처럼 호출해야함
// entityManager.persist(child1);
// entityManager.persist(child2);
// entityManager.persist(parent);
- Parent가 저장되면서 Child도 같이 추가됨
- 해당 옵션만 추가한 상태에서 영속성컨텍스트를 초기화하고 Parent로 삭제할 경우 자식 삭제쿼리가 동작하지 않음 (Remove옵션으로 해결해야함)
Remove 옵션
- 부모 엔티티를 삭제할때 연관되어 있는 자식엔티티를 같이 삭제
ALL 옵션
- Persist + Remove 옵션 합친 옵션
- 자식엔티티를 관리하는 부모 엔티티가 하나일 경우에만 사용해야하며, 라이프 사이클이 같을 경우 사용하는 것이 좋음
'SPRING' 카테고리의 다른 글
[SPRING] MOCKITO (0) | 2022.07.03 |
---|---|
[SPRING] JPA 고아객체 (0) | 2022.06.06 |
[SPRING] WEBFLUX 리액티브 오퍼레이션 정리 (0) | 2022.05.08 |
[SPRING] JPA 쿼리메소드 요약 (0) | 2022.04.19 |
[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory) (0) | 2022.03.02 |