Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- C 언어 코딩 도장
- JSON
- ㅅ
- coding test
- datastructure
- Stack
- buffer
- 알기쉬운 알고리즘
- insertion sort
- stream
- 이것이 자바다
- Graph
- Serialization
- Algorithm
- Selection Sorting
- 이스케이프 문자
- 메모리구조
- 윤성우의 열혈 자료구조
- 혼자 공부하는 C언어
- C programming
- list 컬렉션
- R
- 윤성우 열혈자료구조
- s
Archives
- Today
- Total
Engineering Note
[JPA] 고아객체 본문
고아 객체
JPA에서 부모 엔티티와 연관관계가 끊어진 자식 엔티티.
참조가 제거된 엔티티
고아 객체 제거
부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능.
또는 부모가 제거되면 자식이 제거되는 기능(부모를 제거하면 자식은 참조가 끊기기 때문. CascadeType.REMOVE 설정과 같은 역할을 함.)
이 기능을 사용하면 부모 엔티티의 컬렉션에서 자식 엔티티의 참조만 제거할 때 자식엔티티가 삭제된다.
참조하는 곳이 하나일 때만 사용할 수 있다. => @OneToOne, @OneToMany에만 사용할 수 있다.
//예제 8.19 고아 객체 제거 기능 설정
@Entity
public class Parent {
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "parent", orphanRemoval = true)
private List<Child> children = new ArrayList<Child>();
}
연관관계 제거를 통해 고아객체 제거 기능 수행
Parent parent1 = em.find(Parent.class, id);
parent1.getChildren().remove(0); //자식 엔티티를 컬렉션에서 제거
//실행된 SQL 결과
DELETE FROM CHILD WHERE ID=?
컬렉션에서 첫 번째 자식을 제거했고, orphanRemoval = true 옵션으로 컬렉션에서 엔티티를 제거하면 데이터베이스의 데이터도 삭제된다. 고아 객체 제거 기능은 영속성 컨텍스트를 플러시할 때 적용되므로 플러시 시점에 DELETE SQL이 실행된다.
모든 자식 엔티티를 제거하려면 다음 코드 처럼 컬렉션을 비우면 된다.
parent1.getChildren().clear();
참고자료 : JPA 프로그래밍(김영한)
'Server > JPA ORM' 카테고리의 다른 글
| [JPA] fetch join을 사용하는 이유와 한계 (0) | 2026.04.08 |
|---|---|
| [JPA] 영속성 전이 CASCADE (0) | 2026.02.06 |
| [JPA] N+1문제가 발생하는 예(주문내역 조회) (1) | 2026.01.23 |
| [JPA] JPA에서 연관관계가 맺어진 객체를 비교(eq)하는 것은, 실제 DB에서는 그 객체의 'ID(PK) 값'을 비교하는 것과 완전히 동일하다. (0) | 2026.01.14 |
| [JPA] 영속성 전이 옵션과 연관관계 편의 메서드가 필요한 이유, 고아객체 설정 (1) | 2026.01.10 |
Comments