흰 스타렉스에서 내가 내리지

연관관계 편의 메소드 본문

JPA

연관관계 편의 메소드

주씨. 2024. 4. 2. 13:55
728x90
@Entity
@Getter
public class Member {
    @Id
    @Column(name = "MEMBER_ID")
    private String id;

    private String username;

    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;

    //==연관관계 메소드==//
    public void setTeam(Team team){
        // 기존 팀과 관계를 제거
        if (this.team != null){
            this.team.getMembers().remove(this);
        }
        this.team = team;
        team.getMembers().add(this);
    }   
}
  • 한 번에 양방향 관계를 설정하는 메소드를 연관관계 편의 메소드라 한다. 
  • member.setTeam(team) 과 team.getMembers().add(member) 를 각각 호출하다 보면 실수로 둘 중 하나만 호출해서 양방향이 깨질 수 있기 때문에, 두 코드를 하나인 것처럼 사용하는 것이 안전하다. 
  • 연관관계를 변경할 떄에는 기존 팀이 있으면 기존 팀과 회원의 연관관계를 삭제하는 코드를 추가해야 한다. 

 

*참고

  • 관계를 변경하고 영속성 컨텍스트가 아직 살아있는 상태에서 teamA의 getMembers() 를 호출하면 member1 이 반환된다.
  • 따라서 변경된 연관관계는 설명한 것처럼 관계를 제거한느 것이 안전하다.

'JPA' 카테고리의 다른 글

복합 키 : 비식별 관계 매핑  (1) 2024.04.04
식별 관계 vs 비식별 관계  (0) 2024.04.04
@MappedSuperclass  (1) 2024.04.03
필드와 컬럼 매핑 : 레퍼런스  (0) 2024.04.01
유니크 제약조건 - uniqueConstraints  (0) 2024.04.01