인프런 커뮤니티 질문&답변
연관관계 매핑 질문드립니다.
작성
·
4
·
수정됨
0
강의 13:30분 부터 설명하시는 부분에 대한 질문입니다.
해당 부분은 Member의 팀 값을 변경했을때 DB의 Member의 외래키(TEAM_ID)가 변경되어야하는지, Team의 멤버들을 업데이트 했을 때 외래키 값이 업데이트 돼야하는지에 대한 내용인데요.
전자는 코드상으로
member.setTeam(team)이 될것이고
후자는
team.getMembers().addMember(member)가 될텐데요.
전자는 이전 강의인 단방향 연관관계에서도 봤듯이 해당 코드를 진행하면 DB Member의 외래키 업데이트가 자동적으로 이루어 지는 것으로 이해하고 있습니다
후자는 후자의 코드를 진행해도 FK 업데이트가 이루어 지지 않는 것으로 알고 있습니다.(Team에는 외래키가 없는 것이 원인으로 알고있습니다.)
그래서 영상에서 말씀하신 둘중 무엇으로 외래키를 업데이트 해야하냐 같은 딜레마라고 언급하신 것이 이해가 잘 되질 않습니다.
어차피 후자의 코드자체가 외래키가 업데이트 되지 않는 코드인데 강의에서 언급하신 전자, 후자 중 어느 것으로 업데이트 해야 하는지에 대한 딜레마가 나온 이유를 모르겠습니다.
이부분을 어떻게 이해하여야할까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. yoon6669님.
JPA의 양방향 연관관계에서는 실제 데이터베이스 내 외래키 업데이트가 수행되는 ‘주인’이라고 부르는 방향이 존재합니다. 즉, 양방향 매핑 시 어느 한쪽은 실제 데이터베이스의 외래키 값 변경을 담당하게 됩니다. 이를 ‘연관관계의 주인(owner)‘이라고 하며, 주로 다대일(N:1) 관계의 ‘N’(다수) 쪽인 Member 클래스에서 관리합니다.
Member 엔티티의 ‘setTeam()’ 메서드를 통해 변경을 수행할 경우에는 외래키 업데이트가 자동으로 이뤄지며, ‘Team’ 클래스에 멤버를 추가하는 경우는 단순히 메모리 상의 계층 구조만 변경되는 것입니다. 이렇게 인해 혼란이 생길 수 있는 지점은, 양방향 매핑에서 객체 연산과 데이터베이스 동작 간의 차이점 때문입니다.
JS에서, 객체 관계에만 집중한다면 Member의 team을 통해 변경할 수 있고, Team의 members 컬렉션을 통해서도 비슷하게 보일 수 있지만, 데이터베이스 입장에서의 실질적인 FK 값 변경은 Member에서만 가능합니다.
아래 추가 설명 자료를 통해 이와 관련된 상세한 해설과 코드 예시를 참고하실 수 있습니다:
https://www.inflearn.com/questions/25417 - changeTeam 관련하여 질문 있습니다.
- 김영한님은 이곳에서 연관관계의 주인 객체를 정확히 설정해야 한다고 설명하고, 객체의 실용적인 사용에서도 혼란을 방지할 수 있는 방법을 제시합니다.
- 김영한님은 이곳에서 연관관계의 주인 객체를 정확히 설정해야 한다고 설명하고, 객체의 실용적인 사용에서도 혼란을 방지할 수 있는 방법을 제시합니다.
https://www.inflearn.com/questions/1339813 - 딜레마라고 말씀하신 부분 자체가 이해가 잘 가지 않습니다.
- 패러다임의 불일치 문제를 해결하기 위해 JPA에서 직접적으로 설정 가능한 방법이 무엇인지에 대한 논의입니다.
- 패러다임의 불일치 문제를 해결하기 위해 JPA에서 직접적으로 설정 가능한 방법이 무엇인지에 대한 논의입니다.
이 내용이 도움이 되셨길 바랍니다. 추가적인 도움이 필요하시다면, 질문을 이어가주시면 좋겠습니다. 감사합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






이해가 잘안가네요,,