inflearn logo
강의

Course

Instructor

Java ORM Standard JPA Programming - Basics

Practical Example 2 - Association Mapping Start

연관관계의 주인만 외래키를 관리할수 있다는 의미

135

gomdole030581

108 asked

0

안녕하세요. 연관관계 부분이 많이 헷갈리지만 확실히 알고 가고 싶어서 좀 더 공부하면서 알아보고 있다가 질문드릴게 있어서요..!

강의에서 연관관계의 주인만 외래키를 관리할수 있다는 의미에 대해서 코드로 제가 이해한 바가 맞는지 직접 확인해보았는데요.

 

 

연관관계의 주인만 setTeam()메서드 등을 통해 외래키를 추가 및 변경할 수 있고, 연관관계의 주인이 아닌쪽은 외래키를 참조해서 조회만 할수 있다.

예를들어,

Team team = new Team();
em.persist(team);

Member member1 = new Member();

Member member2 = new Member();

Member member3 = new Member();

member1.setTeam(team); // 이렇게 해야함

member2.setTeam(team); // 이렇게 해야함

em.persist(member1);

em.persist(member2);

em.persist(member3);

team.getMembers().add(member3);

// 이렇게만 하면, member3의 외래키(TEAM_ID)가 설정되지않음.

// 즉 member3의 team필드는 여전히 null이다.

List<Member> newMembers = new ArrayList<>();

Member member4 = new Member();

em.persist(member4);

newMembers.add(member4);

team.setMembers(newMembers);

// 이렇게만 하면, member4의 외래키(TEAM_ID)가 설정되지않음.

// 즉 member4의 team필드는 여전히 null이다

tx.commit();

//그래서 위와같이하면, 이 상태로 db에 저장된다고 해도, 이후에 team.getMembers()를 호출하면, 리스트안에 member1, member2만 있고 member3과 member4는 없다.

 

이렇게 이해하는게 맞을까요..? 항상 질문에 답해주셔서 정말 감사드립니다..!

java jpa

Answer 2

0

gomdole030581

참고해주신 게시물들을 종합해보면 결국

연관관계의 주인만 setTeam()메서드 등을 통해 외래키를 추가 및 변경할 수 있고,

연관관계의 주인이 아닌쪽에서 team.getMembers().add(member3);나 team.setMembers(newMembers);를 하더라도 외래키가 추가 및 변경이 안되고 이후에 team.getMembers()를 호출해서 조회하면, 리스트안에 member1, member2만 있고 member3과 member4는 없다.

 

이렇게 이해해도 괜찮을까요?

0

David

안녕하세요. 오리쉐리님, 공식 서포터즈 David입니다.

네, 이해하신 게 맞습니다:)

감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 오리쉐리님께서 질문하신 내용은 연관관계의 주인 개념에 대한 중요한 이해를 돕는 부분입니다. JPA에서 연관관계의 주인은 외래 키를 소유하며 데이터베이스에서 그 외래 키를 직접 관리하는 역할을 합니다. 반면, 주인이 아닌 쪽은 이 정보에 대해 읽기만 할 수 있다는 것이죠.

오리쉐리님이 예시하신 코드에서 보여주듯이, member.setTeam(team)을 통해 Member 객체의 team 필드에 팀을 설정해 주어야만 제대로 외래키가 관리됩니다. 반대로 team.getMembers().add(member3) 방식은 그저 Java 객체 상태만 변경할 뿐, 데이터베이스에 실제 저장될 때 영향이 없습니다.

아래 게시물들이 오리쉐리님의 궁금증을 해소하는데 더 큰 도움이 될 수 있습니다:

  1. 주인이 아닌 관계에서 읽기 질문 - 이 질문에서는 왜 연관관계의 주인이 아닌 쪽에서 데이터를 추가하는 것이 DB에 반영되지 않는지를 다룹니다.

  2. ManyToOne OneToMany 연관관계에서 궁금한점.. - 양방향 연관관계에서 편의 메소드와 연관관계의 주인의 사용법에 대해 설명하고 있습니다.

  3. 연관관계 주인의 중요성 - 연관관계에서 주인의 역할과 왜 주인을 명확히 지정해야 하는지에 대한 설명이 포함되어 있습니다.

이러한 자료들을 통해 오리쉐리님께서 가지고 계신 궁금증을 해소하고, 연관관계의 주인 개념을 명확히 이해할 수 있기를 바랍니다.

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

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

0

36

1

H2데이터베이스 파일 생성

0

45

2

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

0

47

2

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

0

45

1

JPQL 메소드와 락

0

47

1

Delivery @OneToOne

0

54

1

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

0

84

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

86

2

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

0

77

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

100

2

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

0

74

1

영속성 컨텍스트

0

59

1

JPA 프록시

0

86

1

Native Query와 MyBatis

0

60

1

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

0

81

1

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

0

110

3

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

0

89

3

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

0

100

2

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

0

133

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

172

2