kok202
Orphan removal vs Cascade.remove

2019. 5. 16. 15:10[정리] 기능별 개념 정리/JPA

Orphan removal 는 OneToMany OneToOne 일 때 사용 가능하다.

 

 

 

 

 

OneToOne : Orphan removal vs Cascade.remove

Cascade.remove

@Entity
class Parent {
    @OneToMany(cascade=CascadeType.REMOVE)
    List<Personnel> children;
}

parentRepository.delete(parentA) 하면 children 들도 같이 제거가된다.

 

parentA.setChildren(null)

= 부모가 자식을 버리는 행위

-> 자식은 고아가 된다. 

-> 하지만 이를 save, flush 하지 않으면 DB에서 되지 않는다.

 

Orphan removal 

@Entity
class Parent {
    @OneToMany(orphanRemoval = "true")
    List<Personnel> children;
}

parentRepository.delete(parentA) 하면 children 들도 같이 제거가된다. (자식들은 고아가 되는 것이므로)

 

parentA.setChildren(null) 

= 부모가 자식을 버리는 행위

-> 자식은 고아가 된다. 

-> 고아가 된 자식은 DB에서 자동으로 삭제된다.

 

 

 

 

 

OneToOne : Orphan removal vs Cascade.remove

@Data
@Entity
class Member {
    ....
    @OneToOne(cascade=CascadeType.REMOVE)
    private Address address;
    ....
}

myMember.setAddress(null) 한다고해도 DB에서 myMember 에 연결된 address 가 자동으로 삭제되지 않는다.

@Data
@Entity
class Member {
    ....
    @OneToOne(orphanRemoval=true)
    private Address address;
    ....
}

myMember.setAddress(null) 하면 DB에서 myMember 에 연결된 address 가 자동으로 삭제된다.