인프런 커뮤니티 질문&답변

sparkyoon님의 프로필 이미지
sparkyoon

작성한 질문수

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

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

작성

·

11

·

수정됨

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 엔티티 객체가 자식 객체가 되는건가요?

 

답변 1

0

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

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

연관 관계와 상속 관계 설명

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

Cascade와 OrphanRemoval의 역할

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

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

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

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

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

sparkyoon님의 프로필 이미지
sparkyoon

작성한 질문수

질문하기