# Language/Java

양방향 연관관계 매핑을 위한 연관관계 편의 메소드

  • 양방향 연관관계에서 양쪽 객체의 관계를 모두 채워주기 위한 편의 메소드
  • 한쪽에서만 두 관계를 설정하도록 하는 것이 안전하다.
  • 연관관계 편의 메소드가 위치할 곳은 비즈니스 로직에 따라 다름
    1. 김영한 강사 답변1
    2. 김영한 강사 답변2
  • 다대일 양방향 관계 뿐만 아니라 일대일 양방향 관계에서도 적용 가능한 메소드

 

 

양방향 연관관계 관련 스터디 링크

https://kingpiggylab.tistory.com/340?category=908877 

 

엔티티 매핑 2 (연관관계)

연관관계 매핑 기초 목표 🤔 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 객체가 지향하는 패러다임과 관계가 지향하는 패러다임의 차이를 이해하고 적절하

kingpiggylab.tistory.com

 

 

연관관계 편의 메소드가 필요한 이유

User가 Group을 참조하는 단방향 관계라면 User를 생성할 때 생성자에 Group을 같이 끼움으로 관계 설정이 끝나지만, Group에서도 User를 참조하는 양방향 관계라면 Group쪽에도 새로 추가한 User를 찾을 수 있도록 관계 설정이 필요함

 

연관관계 편의 메소드 위치별 구현

 

1. 다쪽에 위치할 때

@Entity
public class User {
    
		...

    @ManyToOne
    @JoinColumn
    private Group group;
    
    public void setGroup(Group group) {
        if(this.group != null) {
            this.group.getUser().remove(this)
    	}
        
        this.group = group;
		
        if(!group.getUsers().contains(this)) {
            group.getUsers().add(this);
        }
    }
}

 

// 1. 생성
User user = new User("Jarry");

// 2. 연관관계 매핑
user.setGroup(group);

// 3. 저장
userReposity.save(user);

 

 

 

2. 일쪽에 위치할 때

@Entity
public class Group {

		...

    @OneToMany(mappedBy = "group")
    private List<User> users = new ArrayList<User>();
    
    public void addUser(User user) {
        this.users.add(user);
        if (user.getGroup != this) {
            user.setGroup(this);
        }
    }
}

// user에 setter 필요

 

// 1. 생성
User user = new User("Jarry");

// 2. 연관관계 매핑
group.addUser(user);

// 3. 저장
userReposity.save(user);

 

728x90