inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

양방향 연관관계와 연관관계의 주인 1- 기본

연관관계 주인 설정 관련질문

569

나무

작성한 질문수 5

0

강의에서 외래키가 있는 쪽으로 연관관계의 주인을 설정하라고 들었는데,

어노테이션을 보니 @OneToMany에만 mappedBy속성이 있고, @ManyToOne에는 mappedBy 속성이 없습니다.

 

보통 DB에서 외래키는 1:N관계에서 N쪽에서 가지고 있습니다. 그런데 @ManyToOne에 mappedBy가 없고 @OneToMany에만 mappedBy가 있다는 것은 JPA에서 외래키가 있는 방향으로만 연관관계 주인을 설정하도록 막아놓은건가요?

 

그리고 아직 속성값의 이름이 왜 mappedBy인지 잘 와닿지가 않습니다. members 필드는 단순히 team에 의해 맵핑만 당한다는 의미로 보면 되나요?

java jpa

답변 2

0

David

안녕하세요. 나무님, 공식 서포터즈 David입니다.

네, 관계형 데이터베이스 특성상 다(N)쪽에 외래키가 존재하기 때문입니다.

이런 부분을 JPA도 알고 있기에 스펙에서도 다음과 같은 규칙들을 명시해 놓았습니다.

The following rules apply to bidirectional relationships: • The inverse side of a bidirectional relationship must refer to its owning side by use of the mappedBy element of the OneToOne, OneToMany, or ManyToMany annotation. The mappedBy element designates the property or field in the entity that is the owner of the relationship. • The many side of one-to-many / many-to-one bidirectional relationships must be the owning side, hence the mappedBy element cannot be specified on the ManyToOne annotation. • For one-to-one bidirectional relationships, the owning side corresponds to the side that contains the corresponding foreign key. • For many-to-many bidirectional relationships either side may be the owning side.

https://download.oracle.com/otn-pub/jcp/ejb-3_0-fr-eval-oth-JSpec/ejb-3_0-fr-spec-persistence.pdf

mappedBy라는 이름은 "이 필드가 다른 엔티티의 어떤 필드에 의해 매핑되었는가?"를 나타냅니다.

여기서 "매핑된다"는 의미는 "연결된다"나 "관계를 설정한다"와 같은 의미입니다.

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

JPA에서는 양방향 연관관계를 설정할 때 하나의 객체를 연관관계의 주인으로 정해야 합니다. 이 주인 객체만이 데이터베이스에 실제로 영향을 주는 것이죠.

@OneToMany에서는 mappedBy 속성을 사용하여 연관관계 주인을 설정합니다. mappedBy 속성은 해당 필드가 연관관계의 주인이 아닌 반대편(Many)에서 매핑된 필드의 이름을 지정하는 것입니다. 그러므로, 연관관계 주인 객체에서는 mappedBy 속성을 사용할 필요가 없습니다.

즉, @OneToMany쪽에서는 mappedBy를 사용하여서 연관관계를 설정하고, @ManyToOne쪽에서는 mappedBy를 사용할 필요가 없기 때문에 mappedBy 속성이 없습니다.

members 필드가 mappedBy로 맵핑된다는 것은 members 필드가 team쪽에서 맵핑된다는 의미입니다. 즉, members 필드는 연관관계 주인(team)의 외래키와 맵핑된다는 것을 의미합니다.

이렇게 함으로써 JPA는 연관관계 주인의 필드에만 실제로 데이터베이스에 영향을 주도록 하여 데이터의 일관성을 유지할 수 있게 됩니다.

더 자세한 내용은 JPA 관련 문서나 강의를 참고하시면 도움이 될 것 같습니다. 감사합니다.

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

0

20

2

inheritance startegy 선택시 고려사항

0

21

1

Entity 동등성 비교

0

18

1

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

0

44

1

H2데이터베이스 파일 생성

0

56

2

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

0

52

2

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

0

51

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

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

0

92

2

UnsupportedOperationException 발생

0

85

3

H2 Database 연결이 안됩니다.

0

92

2

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

0

85

2

h2데이터베이스 실행오류

0

107

2

persistence.xml

0

106

2

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

0

80

1

영속성 컨텍스트

0

65

1

JPA 프록시

0

94

1

Native Query와 MyBatis

0

67

1

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

0

85

1

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

0

114

3

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

0

94

3

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

0

108

2

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

0

143

1