728x90
- 사실 setTeam() 메소드에는 버그가 있다.
member1.setTeam(teamA); //1
member2.setTeam(teamB); //2
Member findMEmber = teamA.getMember(); //member1이 여전히 조회된다.
- teamB로 변경할 때 teamA -> member1 관계를 제거하지 않았다.
- 연관관계를 변경할 때는 기존 팀이 있으면 기존 팀과 회원의 연관관계를 삭제하는 코드를 추가해야 한다.
- 따라서 다음 코드처럼 기존 관계를 제거하도록 코드를 수정해야 한다.
public void setTeam(Team team) {
//기존 팀과 관계를 제거
if (this.team != null) {
this.team.getMembers().remove(this); //this는 member 자신을 의미함
}
this.team = team;
team.getMembers().add(this);
}
- 이 코드는 객체에서 서로 다른 단방향 연관관계 2개를 양방향인 것 처럼 보이게 하려고 얼마나 많은 고민과 수고가 필요한지 보여준다.
- 반면에 관계형 데이터베이스는 외래 키 하나로 문제를 단순하게 해결한다.
- 정리하자면 객체에서 양방향 연관 관계를 사용하려면 로직을 견고하게 작성해야 한다.
출처 : 자바 ORM 표준 JPA 프로그래밍 (저자 김영한)
728x90
'JPA' 카테고리의 다른 글
@MappedSuperclass (0) | 2022.06.13 |
---|---|
다대일 양방향 [N:1, 1:N] 관계 (0) | 2022.06.13 |
연관관계 편의 메소드(part.1) (0) | 2022.06.12 |
고아 객체(feat. orphanRemoval) (0) | 2022.06.12 |
영속성 전이에 관해(부제 : CASCADE) (0) | 2022.06.11 |