728x90
- 양방향 연관관계는 결국 양쪽 다 신경 써야 한다.
- 다음처럼 member.setTeam(team) 과 team.getMembers().add(member)를 각각 호출하다 보면 실수로 둘 중 하나만 호출해서 양항향이 깨질 수 있다.
member.setTeam(team);
team.getMembers().add(member);
- 양방향 관계에서 두 코드는 하나인 것 처럼 사용하는 것이 안전하다.
- Member 클래스의 setTeam() 메소드를 수정해서 코드를 리팩토링해보자.
public class Member {
private Team team;
public void setTeam(Team team){
this.team = team;
team.getMembers().add(this); //this 는 member 자신을 가리킨다.
}
...
}
- setTeam() 메소드 하나로 양방향 관계를 모두 설정하도록 변경했다(this 주의).
- 연관 관계를 설정하는 부분을 수정하자.
//연관관계 설정
member1.setTeam(team1);
member2.setTeam(team1);
//==기존 코드 삭제 시작==//
//teamA.getMembers().add(member1); //팀1 -> 회원1
//teamA.getMembers().add(member2); //팀1 -> 회원2
//==기존 코드 삭제 종료==//
- 이렇게 리팩토링하면 실수도 줄어들고 좀 더 그럴듯하게 양방향 연관관계를 설정할 수 있다.
출처 : 자바 ORM 표준 JPA 프로그래밍 (저자 김영한)
728x90
'JPA' 카테고리의 다른 글
다대일 양방향 [N:1, 1:N] 관계 (0) | 2022.06.13 |
---|---|
연관관계 편의 메소드 작성 시 주의사항(part.2) (0) | 2022.06.12 |
고아 객체(feat. orphanRemoval) (0) | 2022.06.12 |
영속성 전이에 관해(부제 : CASCADE) (0) | 2022.06.11 |
상속관계 매핑 전략(@DiscriminatorColumn 란?) (0) | 2022.06.05 |