엔티티 연관관계와 테이블의 관계가 헷갈려서 질문드립니다
418
작성한 질문수 17
안녕하세요.
엔티티가 Member, Team 이렇게 있을 때, 멤버 1명이 팀을 옮기게 되면 add(member)를 해주고 team에서 기존 멤버를 빼주는 게 맞지만
db 관점에서는 괜찮지만 어플리케이션에서는 지워주는게 맞다고 하셨는데요
이 부분이 잘 이해가 가지 않습니다.
해당링크 : (https://www.inflearn.com/questions/25417)
우선 제가 현재 이해하고 있는 것을 말씀드려보겠습니다.
저는 엔티티가 곧 테이블이라고 이해하고 있습니다. (틀리다면 정정해주시면 감사합니다)
Member, Team 테이블이 각각 있을 때
Team에는 team_id, team_name, list team member
이렇게 설계가 되는 것까지는 이해했습니다.
이 team 에서 list 는 실제 member 데이터가 삽입되는 것이 아니고 team에 있는 team_id를 통해 member 테이블에서 team으로 fk를 걸어 놓은 것으로 알고 있습니다.
member가 team을 옮기게 될 경우, member가 team 에 걸어놓은 fk가 변경이 되기 때문에 member 쪽에서만 update 해줘도 된다고 이해하고 있고요.
db 관점에서 괜찮다고 하시는 부분은 아마 이 부분을 말씀하시는 거 같고, 어플리케이션 관점은 영속성 컨택스트에서 관리되고 있는 데이터를 말씀하시는 것 같은데
제가 제대로 이해하고 있는 게 맞을까요?
맞다면 후자의 경우에는 영속성에서 관리되는 부분을 끊으면 된다는 이야기(비영속으로 적용)인 걸까요?
감사합니다.
답변 1
1
안녕하세요. 해마님, 공식 서포터즈 David입니다.
양방향 연관관계를 가지는 객체 관점에서 데이터가 등록, 수정, 삭제 되었을 때 DB에 반영되는 쪽은 연관관계 주인(강의 내용상 Member 객체 내 team) 쪽입니다.
그 반대편인 Team의 List<Member> members(이하 members)는 객체 관점에서 양방향 연관관계를 구현하기 위해 추가한 것입니다. 그리고 연관관계 주인에 매핑된 members 특성상 데이터가 등록, 수정, 삭제 되더라도 DB에 반영되진 않습니다.
이 특성에 따라 링크하신 질문 글의 답변을 생각해보면, Member(연관관계 주인)의 team을 변경(changeTeam())했을 때는 DB에 반영됩니다. 그러면 객체 관점에서 생각해보면 당연히 Team 내 members에서 특정 member를 지워주어야 합니다. 팀이 바뀌었으니깐요. 그런데 DB 관점에서는 굳이 지워주지 않아도 괜찮다는 것입니다. 왜냐하면 이미 Member가 team을 변경하기만 해도 Member 테이블의 team fk가 변경되었기 때문입니다. 그러나 Team의 members는 연관관계 주인이 아니기 때문에 members에서 특정 member를 지워도 데이터베이스에는 반영되지 않습니다.
결론적으로 객체 관점에서는 팀을 변경한 멤버를 팀 객체의 멤버 목록에서 지워주는 게 맞지만 보통 변경된 데이터를 즉시 사용하는 경우는 드물기에 지워주는 로직을 추가하지 않았다고 보시면 됩니다.
혹시나 이 부분이 잘 이해가 되지 않으시다면 본 강의 '양방향 연관관계와 연관관계의 주인 1, 2'편을 반복 수강하시길 권장드립니다.
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
58
2
inheritance startegy 선택시 고려사항
0
42
1
Entity 동등성 비교
0
47
1
실무 조언 관련 질문입니다.
0
68
1
H2데이터베이스 파일 생성
0
78
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
70
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
63
1
JPQL 메소드와 락
0
63
1
Delivery @OneToOne
0
72
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
105
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
103
2
연관관계 매핑 질문드립니다.
0
95
2
h2데이터베이스 실행오류
0
116
2
persistence.xml
0
121
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
90
1
영속성 컨텍스트
0
77
1
JPA 프록시
0
107
1
Native Query와 MyBatis
0
83
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
126
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
103
3
인텔리제이 패키지 커서 단축키 질문
0
113
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
156
1





