- 양방향 연관관계에서 양쪽 객체의 관계를 모두 채워주기 위한 편의 메소드
- 한쪽에서만 두 관계를 설정하도록 하는 것이 안전하다.
- 연관관계 편의 메소드가 위치할 곳은 비즈니스 로직에 따라 다름
- 다대일 양방향 관계 뿐만 아니라 일대일 양방향 관계에서도 적용 가능한 메소드
양방향 연관관계 관련 스터디 링크
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
'# 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 |