[개발] - Spring/JPA 공부
다대일 [N : 1]
완벽한 장면
2023. 8. 20. 01:58
다대일 단방향
- MEMBER 입장에서 TEAM_ID는 이걸 통해 TEAM으로 찾아가기 위한 것이고,
- 같은 레벨로 (객체)Member에서 Team team 이라는 참조값도 동일한 의미.
다시 예시
앞에 했던 것들은 커밋 기록 남아있으니까 꽤 지우고
Member
@Entity
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Team getTeam() {
return team;
}
}
Member 에서 Team으로 가고 싶으면,
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
TEAM_ID 라는 외래키랑 매핑할 거라고 적어주면 된다.
Team은 Member로 가고자 하는 의지가 없기 때문에 그냥 두면 됨.
@Entity
public class Team {
@Id
@GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
이게 바로 다대일 단방향 관계
정리하자면
- 가장 많이 사용하는 연관관계
- 다대일의 반대는 일대다
다대일 양방향
추가한 부분
@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<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
정리하자면
- 외래 키가 있는 쪽이 연관관계의 주인
- 양쪽을 서로 참조하도록 개발
728x90
반응형