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 가 자동으로 삭제된다.
'[정리] 기능별 개념 정리 > JPA' 카테고리의 다른 글
Differences between @Entity(name) and @Table(name) (0) | 2019.05.20 |
---|---|
영속성 컨텍스트 정리 (0) | 2019.05.20 |
JPA 양방향 맵핑, Test 코드 작성시 유의사항 (0) | 2019.04.25 |
JPA - Mapped By 의 필요성, '관계의 주인' 의미 (2) | 2019.04.25 |
JPA (기초 : 영속성 컨텍스트) (0) | 2019.03.17 |