작성
·
491
7
안녕하세요, 영한님! 강의 너무 잘듣고 있는데 중간에 의문이 생겨서 질문드립니다.
이 의문이 기본, 실전 Spring Data jpa 어디서 났는지 구체적으로 기억이 안나서 일단 기본편에서 질문드립니다!
구조는 Member(N) - Team(1) 양방향 매핑으로 설정한 상태입니다. 그리고 Member가 Team을 바꾸려는 상황입니다.
강의를 보면.. Member 엔티티 내에 아래와 같은 changeTeam() 이라는 메소드를 구현합니다.
public void changeTeam(Team team) {
this.team = team;
team.getMembers().add(this);
}
그렇다면 객체의 입장에서 아래처럼 된다는 것 까지는 이해를 했습니다.
- Member 내에 '새 Team'으로 변경됨
- '새 Team' 내에도 원하는 Member가 추가됨
여기서 2가지 질문이 있습니다.
1. 그런데 '구 Team' 객체는 어떻게 되나요?
그 객체의 상태값인 List<Member> members에는 여전히 Member가 남아 있지 않나요?
getMembers() 불러와서 remove를 쓰던 다른 방법을 쓰던 어쨌든 지워주던가 해야하는것 아닌가? 하는 의문이 듭니다.
2. 1의 의문이 타당하여 만약 changeTeam() 내에 기존 Team에서 Member를 삭제해주는 추가적인 구현이 있을 경우..
처음 Member에 team을 설정해주는 setTeam()과 changeTeam()을 아예 따로 구현하는게 바람직할까요? 실무적 관점에서는 어떻게 생각하시는지 궁금합니다.
답변 3
6
안녕하세요. kkssry님 좋은 질문입니다.
원칙적으로 구 list에 있는 team을 제거하도록 코드를 작성하는 것이 맞습니다.
다만 이 관계에서 list는 연관관계의 주인이 아니므로 실제 데이터베이스에 영향을 주지는 않습니다.
객체까지 고려하면 list에 있는 team을 제거하는 것이 맞지만, 실용적인 관점에서 그냥 두어도 DB에서 삭제되지 않으므로 크게 상관은 없습니다^^
0
0
답변 감사합니다.
그럼 결국 DB관점에서는 괜찮겠지만,
실제 어플리케이션에서는
해당 객체들이 애플리케이션의 이곳저곳 활용이 될 여지가 있으니 지워주는것이 맞다고 이해하면 되겠지요?!