Database/JPA

JPA CascadeType

BUST 2018. 9. 8. 15:38

JPA CascadeType

JPA에서 연관관계(@OneToMany, @ManyToOne) 에 부모 엔티티와 자식 엔티티에 대한 영속성 처리에 대한 설정을 할수가 있다.
  • CascadeType.RESIST 
    • 엔티티를 생성하고, 연관 엔티티를 추가하였을 때 persist() 를 수행하면 연관 엔티티도 함께 persist()가 수행된다. 
    • 만약 연관 엔티티가 DB에 저장이 되어있으면 다시하며 persist 를 하는 것이기때문에  detached entity passed to persist Exception이 발생한다.
      • 이경우에는 CascadeType.MERGE를 사용한다.
  • CascadeType.MERGE
    • 트랜잭션이 종료되고 detach 상태에서 연관 엔티티를 추가하거나 변경된 이후에 부모 엔티티가 merge()를 수행하게 되면 변경사항이 적용된다.
    • 연관 엔티티의 추가 및 수정 모두 반영됨
  • CascadeType.REMOVE 
    • 삭제 시 연관된 엔티티도 같이 삭제됨
    • orphanRemoval  옵션과의 차이점은 연관된 엔티티 중 하나가 삭제되는 경우이고 REMOVE 옵션은 부모 엔티티가 삭제된 경우 연관된 엔티티인 자식 엔티티까지 전부 삭제한다는 옵션이다.
  • CascadeType.DETACH
    • 부모 엔티티가 detach()를 수행하게 되면, 연관된 엔티티도 detach() 상태가 되어 변경사항이 반영되지 않는다.
  • CascadeType.ALL
    • 모든 Cascade 적용


'Database > JPA' 카테고리의 다른 글

JPA 영속성 컨텍스트  (0) 2018.09.08
@ EnableTransactionManagement Advice Mode PROXY와 ASPECTJ  (0) 2018.06.03
Transactional with jpa repository  (0) 2018.05.28
Database Transaction Lock With JPA  (0) 2018.05.28