영속성 전이(CASCADE)
- 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용
- 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함 제공(부모 엔티티 저장 시 자식 엔티티도 함께 저장)
- 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없음
- 종류
- ALL : 모두 적용
- PERSIST : 영속
- REMOVE : 삭제
- MERGE : 병합
- REFRESH : refresh
- DETACH : detach
@Entity
public class Parent {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) // Cascade
private List<Child> childList = new ArrayList<>();
public void addChild(Child child){
childList.add(child);
child.setParent(this);
}
...
@Entity
public class Child {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
...
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try{
Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);
// 부모 엔티티를 persist 할 때 자식 엔티티도 함께 저장됨
em.persist(parent);
// Cascade사용으로 해당 작업 불필요
// em.persist(parent);
// em.persist(parent);
tx.commit();
} catch(Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
'Spring > JPA' 카테고리의 다른 글
값 타입 컬렉션 (0) | 2024.01.02 |
---|---|
임베디드 타입 (0) | 2023.12.30 |
즉시로딩, 지연로딩 (1) | 2023.12.23 |
프록시(Proxy) (0) | 2023.12.20 |
MappedSuperclass (0) | 2023.12.20 |