Cascade는 연관관계와 전혀 상관없다!!!! 그냥 영속성을 전이시켜주는 것!영속성 전이(CASCADE)엔티티CascadeType.PERSISTCascadeType.MERGECascadeType.REMOVEOrphanRemoval( @OneToMany(orphanRemoval = true) )현업에서 사용하는 delete(Soft delete. flag활용) - @Where
Cascade는 연관관계와 전혀 상관없다!!!! 그냥 영속성을 전이시켜주는 것!
영속성 전이(CASCADE)
- @OneToMany, @ManyToOne등에서 사용 가능
- 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속상태로 만들고 싶을때, 사용한다.
- 영속성을 전이하는 것이지 연관관계를 맺어주는 것이랑은 전혀 상관없음!!
엔티티
CascadeType.PERSIST
- CASCADE를 쓰지 않으면 persist를 둘다 따로 해주어야 함. cascade가 종속이라는 의미이기에 하나를 하면 다른것도 종속되어서 같이 진행된다고 이해하면 됨
CascadeType.MERGE
CascadeType.REMOVE
OrphanRemoval( @OneToMany(orphanRemoval = true) )
- @OneToOne과 @OneToMany에만 사용할 수 있음
- 부모 엔티티의 컬렉션에서 자식 엔티티의 참조만 제거하면 자식 엔티티가 자동으로 삭제되는 기능
- 참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로 보고 삭제하는 기능 → 이 기능은 참조하는 곳이 하나일 때만 사용해야 함
- 고아 객체 제거 기능은 영속성 컨텍스트를 플러시할 때 적용되므로 플러시 시점에 DELETE SQL이 실행
현업에서 사용하는 delete(Soft delete. flag활용) - @Where
- 실제로 delete하는 경우는 거의 없이 deleted라는 boolean field를 만들어서 관리를 주로 함
- query method
findAllByDeletedFalse()를 통해서 delete 되지 않은 entity만 얻어낼 수 있음
- 그러나 이는 빼 먹을 수 있기 때문에, @Where annotation을 추가함