Spring JPA

[Spring JPA] 일대다 관계

hoondev3 2023. 1. 27. 17:05

 

단방향

Member 

@Entity
public class Member { 
 
 @Id @GeneratedValue
 private Long id;
 
 @Column(name = "USERNAME")
 private String name;

 … 
}

Team

@Entity
public class Team {

 @Id @GeneratedValue
 private Long id;
 
 private String name; 
 
 @OneToMany
 @JoinColumn(name = "TEAM_ID") // 일대다 관계
 private List<Member> members = new ArrayList<>();
 … 
}

일대다 관계는 다대일 관계와 반대로 일 쪽에서 외래키를 관리하는 구조이다.

 

문제점

테이블에서는 외래키가 항상 다 쪽에 있기 때문에 발생하는 문제점이 있다.

team의 members를 업데이트 한다고 하면 테이블엔 외래키가 member에 있기 때문 

팀을 수정하였는데 멤버에 쿼리가 나가는 이상한 현상이 발생한다.

 

이러한 문제때문에 일대다 단방향 매핑보다는 다대일 양방향 매핑을 쓰는 것이 더 좋을 것이다.

 

양방향

양방향은 Member클래스에 다음과 같은 코드를 추가한다.

@ManyToOne
@JoinColumn(name = "TEAM_ID", insertable = false, updatable = false)
private Team team

이렇게 하면 읽기전용으로 만들어서 양방향을 구현할 수 있다. 딱봐도 뭔가 억지로 만든 느낌이 난다...

일대다 양방향보다 다대일 양방향을 사용을 권장하는 이유가 있는거 같다.

 

Reference

https://www.inflearn.com/course/ORM-JPA-Basic