작성
·
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
가 부모 객체가 되며, OrderItem
과 Delivery
가 자식 객체가 됩니다. 이는 Order
가 OrderItem
및 Delivery
의 생명주기(생성, 삭제 등)를 관리하게 된다는 의미입니다.
관련하여 더 깊이 이해하고 싶으시다면, 다음의 유사한 질문과 답변을 참고해 보시기 바랍니다:
해당 게시물에는 cascade와 orphanRemoval의 차이점 및 활용 방법에 관한 설명도 포함되어 있어 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.