- 양방향 연관관계에서 양쪽 객체의 관계를 모두 채워주기 위한 편의 메소드
- 한쪽에서만 두 관계를 설정하도록 하는 것이 안전하다.
- 연관관계 편의 메소드가 위치할 곳은 비즈니스 로직에 따라 다름
- 다대일 양방향 관계 뿐만 아니라 일대일 양방향 관계에서도 적용 가능한 메소드
양방향 연관관계 관련 스터디 링크
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
'# Language > Java' 카테고리의 다른 글
Checked Exception과 Unchecked Exception 이란? 예외 처리 기법 (0) | 2023.05.01 |
---|---|
[Java] [Mac] 여러 버전의 Java를 설치/변경하기 (0) | 2022.10.07 |
[Java 8] Stream 정렬 예제 메모 (0) | 2022.09.02 |
[Java] 향상된 for문 콜론 ":" 연산자 (0) | 2021.01.25 |
[Java] 2차원 배열 인덱스 (0) | 2021.01.22 |
Random 클래스 이용한 중복 없는 난수 생성하기 ( 1 to 99) (0) | 2020.05.18 |
Java 패키지 네이밍 (0) | 2020.03.16 |