Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 우분투에war배포
- DB생성
- Lombok
- spring
- offset
- Seek_Keyset
- frontend
- String
- gradle
- minikube
- NullPointerException
- SpringBoot
- appleM1
- MySQL
- 스프링에러
- SQL
- springMVC
- pagination
- Java
- restful api
- MYSQL에러
- K8S
- MySQL시작하기
- wappalyzer
- VUE
- 이클립스
- Postman
- windows10
- CloutNative
- intellij
Archives
- Today
- Total
미운 오리 새끼의 우아한 개발자되기
[JPA] 다양한 연관관계 매핑 (1) 다대일 본문
엔티티의 연관관계를 매핑할 때 주의할 사항 3가지
- 다중성 - 다대일, 일대다, 일대일, 다대다
- 단방향, 양방향
- 연관관계의 주인
1. 다대일
다대일 관계의 반대방향은 항상 일대다 관계다. DB 테이블의 일(1) 대 다(N) 관계에서 외래 키는 항상 다(N) 쪽에 있다. 따라서 객체 양방향 관계에서 연관관계의 주인은 항상 다(N) 쪽이다.
1. 1. 다대일 단방향[N:1]
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private String id;
private String username;
// 연관관계 매핑
@ManyToOne // 다(Member)대일(Team)
@JoinColumn(name = "TEAM_ID") // 외래키를 매핑할 때 쓰는 annotation. 매핑할 외래키 이름을 씀
private Team team;
// Getter, Setter...
}
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
// Getter, Setter...
}
다(N) 인 회원은 Member.team 으로 팀 Entity를 조회할 수 있음. 일(1)인 팀은 회원 Entity 조회 불가.
1. 2. 다대일 양방향[N:1, 1:N]
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String username;
// 연관관계 매핑
@ManyToOne // 다(Member)대일(Team)
@JoinColumn(name = "TEAM_ID") // 외래키를 매핑할 때 쓰는 annotation. 매핑할 외래키 이름을 씀
private Team team;
// 연관관계 설정
public void setTeam(Team team) {
this.team = team;
// 무한루프에 빠지지 않도록
if(!team.getMembers().contains(this)) {
team.getMembers().add(this);
}
}
// Getter, Setter...
}
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<Member>();
public void addMember(Member member) {
this.members.add(member);
if(member.getTeam() != this) { // 무한루프에 빠지지 않도록 체크
member.setTeam(this);
}
}
// Getter, Setter...
}
- 양방향은 외래키가 있는 쪽인 연관관계의 주인이다.
- 양방향 연관관계는 항상 서로를 참조해야한다.
- 연관관계 편의 메서드는 양쪽 다 작성하면 무한루프에 빠지므로 주의할 것.
Reference : 자바 ORM 표준 JPA 프로그래밍 (김영한 저)
'Spring & Spring Boot > Spring' 카테고리의 다른 글
[JPA] 다양한 연관관계 매핑 (3) 일대일 (0) | 2023.04.11 |
---|---|
[JPA] 다양한 연관관계 매핑 (2) 일대다 (0) | 2023.04.11 |
[JPA] 연관관계 매핑 기초 (2) 양방향 연관관계 (0) | 2023.04.09 |
[JPA] 연관관계 매핑 기초 (1) 단방향 연관관계 (0) | 2023.04.09 |
[Spring MVC] Spring MVC 작동 원리 (0) | 2020.09.07 |