인프런 커뮤니티 질문&답변

park님의 프로필 이미지
park

작성한 질문수

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

changeTeam 관련하여 질문 있습니다.

작성

·

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

park님의 프로필 이미지
park
질문자

답변 감사합니다.

그럼 결국 DB관점에서는 괜찮겠지만,

실제 어플리케이션에서는

해당 객체들이 애플리케이션의 이곳저곳 활용이 될 여지가 있으니 지워주는것이 맞다고 이해하면 되겠지요?!

park님의 프로필 이미지
park

작성한 질문수

질문하기