ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] 연관관계에 있는 엔티티 영속화 시키기, CASCADE
    legacy/JPA 2024. 1. 26. 17:48

     

    엔티티 A와 B가 영속관계에 있을 때 A를 영속화시켰을 때 자동으로 B까지 영속화시키려면 CASCADE를 사용해야 합니다. 사용방법에 대해서 알아보겠습니다.

    CASCADE란?

    CASCADE란 영속성 전이라고 합니다. 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용합니다.

    JPA는 CASCADE 옵션을 제공하여 em.persist()를 사용하지 않아도 엔티티를 영속화시킬 수 있습니다.

     

    CASCADE의 옵션은 다음과 같습니다.

    • ALL, 아래에 있는 모든 옵션 적용
    • PERSIST, 특정 엔티티 영속화
    • MERGE, 병합
    • REMOVE, 삭제
    • REFRESH
    • DETACH

    연관관계에 있는 Entity 영속화, Cascade.PERSIST

    A엔티티를 영속화시킬 때 연관관계에 있는 B엔티티를 자동으로 영속화시키기 위해서는 CASCADE이 제공하는 PERSIST 옵션을 사용해야 합니다.

     

    영속 관계

    • Member - View
    • Board - View
    • Member - Board

    Member

    Cascade.PERSIST

     

    Board

    Cascade.PERSIST

     

    View

     

    영속화

    1. View Entity 생성 -> 영속화 상태 X
    2. Board Entity 생성 -> 영속화 상태 X
    3. Member Entity 생성 -> 영속화 상태 X
    4. 연관관계 맺어주기
      1. View - Member
      2. View - Board
      3. Board - Member
    5. Member Entity 영속화

     

    DB

    Member Entity만 영속화시켰음에도 Board와 View 엔티티까지 자동으로 영속화되었습니다. CASCADE 기능을 통해 연관관계로 맺어져 있는 Entity를 영속화시키지 않아도 자동으로 영속화되었습니다.

     

     

    연관관계에 있는 Entity 제거, CascadeType.REMOVE

    특정 Entity를 제거할 때 연관관계에 있는 Entity를 같이 제거하려면 CASCADE 기능 중에 REMOVE 옵션을 사용해야 합니다. 

     

    Member

    Cascade.PERSIST, Cascade.REMOVE

     

    Board

    Cascade.PERSIST, Cascade.REMOVE

     

    View

     

    Code

    Member 엔티티가 아래와 같이 Board, View 엔티티와 연관관계에 있습니다.

    • Member - Board
    • Member - View

    Cascade.PERSIST 사용하여 Member 엔티티를 저장할 때 Board와 View 엔티티가 같이 저장되도록 하였습니다. 그 결과는 위에서 설명한 DB를 확인하면 됩니다.

    이후 Cascade.REMOVE 옵션을 사용하는 Member 엔티티를 제거를 하였습니다. REMOVE 옵션을 사용하면 Entity를 제거할 때 연관관계에 있는 Entity를 같이 제거하게 됩니다.

     

    DB

    결론

    Cascade.PERSIST : 연관관계에 있는 Entity 추가로 저장(영속화)

    Cascade.REMOVE : 연관관계에 있는 Entity 추가로 제거

Designed by Tistory.