# Language/Java
양방향 연관관계 매핑을 위한 연관관계 편의 메소드
왕꿀꿀
2022. 3. 14. 13:23
- 양방향 연관관계에서 양쪽 객체의 관계를 모두 채워주기 위한 편의 메소드
- 한쪽에서만 두 관계를 설정하도록 하는 것이 안전하다.
- 연관관계 편의 메소드가 위치할 곳은 비즈니스 로직에 따라 다름
- 다대일 양방향 관계 뿐만 아니라 일대일 양방향 관계에서도 적용 가능한 메소드
양방향 연관관계 관련 스터디 링크
https://kingpiggylab.tistory.com/340?category=908877
연관관계 편의 메소드가 필요한 이유
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