강의

멘토링

로드맵

Inflearn brand logo image

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

오리쉐리님의 프로필 이미지
오리쉐리

작성한 질문수

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

값 타입 컬렉션

값 타입 컬렉션 대안에 대해 질문드립니다.

작성

·

36

0

@Entity

public class Member{

...

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)

@JoinColumn(name = "MEMBER_ID")

private List<AddressEntity> addressHistory = new ArrayList<>();

...

}

강의에서 위와 같이 값타입 컬렉션을 사용하지않고, 일대다 연관관계를 위한 엔티티를 만들어서 사용하라고 하셨는데요.

그 부분에 대해서 설명을 못 들은 부분이 있어서 질문드립니다.

 

1. 다대일 양방향 연관관계를 사용해서 해도 될거같은데, 다대일 양방향 연관관계를 사용하지않고 굳이 일대다 단방향 연관관계를 사용한 이유가 무엇인가요?? 단순히 AddressEntity에서 Member에 대해서 조회할 일이 없고 Member에서만 AddressEntity에 대해서 조회할 일이 있으므로 그런것일까요?

2. cascade와 orphanRemoval을 사용하셨는데, 그 이유가 무엇이고 사용하지않으면 안되는 이유도 같이 궁금합니다ㅠㅠ

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 오리쉐리님

이전에 보았던 값타입 컬렉션 예제와 최대한 맞추기 위해서 1, 2번 모두를 적용했습니다. 값타입 컬렉션도 생각해보면 일대다 관계입니다. 또한 값 타입 컬렉션은 cascade, orphanRemoval이 모두 적용된 것이라 생각하시면 됩니다.

감사합니다.

0

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

오리쉐리님께서 질문하신 내용은 JPA에서의 연관관계 설정과 관련된 부분으로, 매우 중요한 주제입니다. 관련된 기존 질문과 답변들을 통해 궁금점을 해결할 수 있도록 안내해드리겠습니다.

  1. 일대다 단방향 연관관계를 사용한 이유:

    • JPA에서 OneToMany는 기본적으로 단방향으로 설정할 수 있으며, 이 경우 JoinColumn을 통해 MEMBER_ID를 직접 관리하게 됩니다. 이를 통해 연관된 엔티티의 관계와 데이터를 보다 간단히 관리할 수 있습니다. 반면, 양방향 사용 시에는 복잡해질 수 있으며, 필요에 따라 선택할 수 있는 방법입니다.
    • 관련 답변: 일대다 연관관계에 관해서에서는 왜 특정 맵핑 구조를 선택했는지를 확인하실 수 있습니다.
  2. CascadeOrphanRemoval 사용 이유:

    • Cascade 옵션은 특정 엔티티 상태가 변화될 때 관련 엔티티들도 자동으로 그 상태에 따른 동작을 수행하게 합니다. 예를 들어, CascadeType.ALL은 모든 상태 변경을 전파시키며, 새로운 AddressEntity가 추가되었을 때까지도 자동으로 반영됩니다.
    • OrphanRemoval은 리스트에서 요소가 제거되었을 때 데이터베이스에서도 해당 객체가 삭제되도록 합니다. 즉, Member에서 AddressEntity가 삭제되면, 그 데이터베이스 레코드도 삭제되도록 보장합니다.
    • 관련 답변: @joinColumn 질문입니다.에서는 CascadeJoinColumn 관련한 논의가 있습니다.

위 링크의 내용을 참고하시면, 강사님이 왜 특정 JPA 매핑 방법론을 선택했는지에 대해 더 명확히 이해할 수 있을 것입니다.

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

오리쉐리님의 프로필 이미지
오리쉐리

작성한 질문수

질문하기