inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

부모 객체, 자식 객체에 대한 질문

84

sparkyoon

작성한 질문수 7

1

안녕하세요.

이번에 JPA 로드맵을 다시 한번 복습을 하면서

부모 객체, 자식 객체에 대한 궁금한 점이 생겼습니다.

부모 객체, 자식 객체 관계의 용어는 어떤 상황에서 사용해야 하는 건가요?

연관 관계도 아닌 것 같고..

상속 관계도 아닌 것 같고..

(자바, 스프링 로드맵에서 강사님이 항상 강조하시는 말씀이 있죠.

부모는 ~ 품을 수 있지만 자식은 ~ 품을 수 없다.

근데 JPA에서는 전혀 다른 상황인 것 같아서요.)

 

cascade와 orphanRemoval 기능을 사용하기 위해

cascade와 orphanRemoval 코드를 내부에 적은 객체 자체가 부모 객체가 되는 건가요?

 

예를 들면

@Entity
@Table(name = "orders")
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Order {

    @Id @GeneratedValue
    @Column(name = "order_id")
    private Long id;

    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "member_id")
    private Member member;

    @JsonIgnore
    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<OrderItem> orderItems = new ArrayList<>();

    @JsonIgnore
    @OneToOne(fetch = LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "delivery_id")
    private Delivery delivery;

...

​위의 코드에서

cascade = CascadeType.ALL, orphanRemoval = true

기능을 사용해서 생명주기의 책임이 있는

Order 엔티티 객체가 부모 객체가 되고

OrderItem과 Delivery 엔티티 객체가 자식 객체가 되는건가요?

 

java jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. sparkyoon님.

JPA에서 부모 객체와 자식 객체라는 용어는 엔티티 간의 관계를 설명할 때 자주 사용됩니다. 이 용어는 엔티티 간의 연관 관계나 상속 관계와는 다릅니다. 여기서 부모 객체는 주로 관리되는(조작되는) 엔티티를 말하며, 자식 객체는 그 엔티티에 종속적으로 관리되는 엔티티를 의미합니다.

연관 관계와 상속 관계 설명

  • 연관 관계: 엔티티 간의 관계를 나타내며, 일반적으로 @OneToMany, @ManyToOne, @OneToOne, @ManyToMany 등의 어노테이션으로 표현됩니다.
  • 상속 관계: 클래스 상속 구조에 기반한 엔티티 상속으로, 주로 @Inheritance 어노테이션으로 설정됩니다.

Cascade와 OrphanRemoval의 역할

  • cascade=CascadeType.ALL: 부모 객체의 상태 변화를 자식 객체에게 전파합니다. 예를 들어, 부모 객체를 저장(persist)하면 관련 자식 객체들도 자동으로 저장됩니다.
  • orphanRemoval=true: 부모 객체가 자식 객체와의 관계를 제거했을 때 자식 객체를 삭제합니다. 즉, 고아 객체가 되면 해당 객체를 삭제합니다.

질문에서 언급하신 것처럼, Order 엔티티가 생명주기를 관리하는 책임을 가지고 있다면, Order가 부모 객체가 되며, OrderItemDelivery가 자식 객체가 됩니다. 이는 OrderOrderItemDelivery의 생명주기(생성, 삭제 등)를 관리하게 된다는 의미입니다.

관련하여 더 깊이 이해하고 싶으시다면, 다음의 유사한 질문과 답변을 참고해 보시기 바랍니다:

해당 게시물에는 cascade와 orphanRemoval의 차이점 및 활용 방법에 관한 설명도 포함되어 있어 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

33

2

inheritance startegy 선택시 고려사항

0

24

1

Entity 동등성 비교

0

24

1

실무 조언 관련 질문입니다.

0

48

1

H2데이터베이스 파일 생성

0

59

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

57

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

58

1

JPQL 메소드와 락

0

56

1

Delivery @OneToOne

0

62

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

98

2

UnsupportedOperationException 발생

0

89

3

H2 Database 연결이 안됩니다.

0

98

2

연관관계 매핑 질문드립니다.

0

88

2

h2데이터베이스 실행오류

0

110

2

persistence.xml

0

112

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

83

1

영속성 컨텍스트

0

70

1

JPA 프록시

0

100

1

Native Query와 MyBatis

0

73

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

93

1

임베디드 타입 예시 코드 관련 질문

0

121

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

96

3

인텔리제이 패키지 커서 단축키 질문

0

109

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

149

1