본문 바로가기
Spring/JPA

영속성 전이

by o3oppp 2023. 12. 29.

영속성 전이(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