작성
·
15
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
임베디드 타입 강의 (5:30)에서, @ManyToOne을 지웠는데, 강사님의 Team의 @OneToMany가 어떻게 되어 있기에 H2 데이터베이스와 연결했을 때, Member table에 FK로 TEAM_ID가 들어가게 되는지 (6:58)궁금합니다.
저 같은 경우에는, Team의 어노테이션이 이렇게 되어있는데,
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
그대로 실행시켰을 때, 아래처럼 매핑이 잘못되었다는 문구가 뜹니다.
Exception in thread "main" org.hibernate.AnnotationException: Collection 'hellojpa.Team.members' is 'mappedBy' a property named 'team' which does not exist in the target entity 'hellojpa.Member'
답변 2
0
영상에서는 Member 엔티티에서 Team 엔티티와의 연관관계를 지우고 실행시켰을 때 FK로 TEAM_ID가 들어가는데, Team엔티티에서 Member엔티티에 대한 연관관계가 어떻게 되어있기에 가능한건지 궁금합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
임베디드 타입과 연관된 JPA 매핑에서 발생한 문제에 대해 설명드리겠습니다.
질문하신 내용은 @OneToMany
관계에서 mappedBy
속성이 사용될 때 발생하는 오류에 관한 것입니다. mappedBy
속성은 상대 엔티티에서 연관관계를 설정한 필드명을 지정해야 합니다. 즉, mappedBy = "team"
는 Member
엔티티에 team
이라는 이름의 필드가 있어야 한다는 뜻입니다.
Member
엔티티에 team
필드가 존재하지 않거나, 이미 있는 경우 이름이 잘못 설정되어 있을 수 있습니다.Member
엔티티 내에 Team
을 참조하는 다음과 같은 필드가 있어야 정상 작동합니다.@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team; // mappedBy에서 참조하는 필드명
// getters and setters
}
Member
엔티티가 Team
을 참조하고 있는지, 그리고 필드명이 일치하는지 확인하세요.@OneToMany
와 @ManyToOne
매핑이 올바르게 되어 있는지 다시 확인합니다.
[MappedBy 속성에 대한 자세한 설명](https://www.inflearn.com/course/ORM-JPA-Basic) - 연관관계 매핑에서의 `mappedBy` 설정이 왜 중요한지 더 잘 이해할 수 있습니다.
정리하자면, mappedBy
속성은 연관관계의 주인이 아닐 경우 상대 엔티티에서 해당 필드를 통해 양방향 연관관계를 설정하게 되며, 필드명이 정확하지 않으면 오류가 발생할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.