JPA

연관관계 편의 메소드(part.1)

쿠카이든 2022. 6. 12. 17:02
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