앞에서 다대일 연관관계를 살펴보았다. 다대일
이번 글에서는 일대다 연관관계를 알아볼 것이다.
일대다 단방향
일대다에서 일이 연관관계의 주인이다.
객체에서는 연관관계의 주인인 Team이 members로 외래키를 관리한다.
테이블에서는 무조건 다쪽인 Member에 외래키가 들어간다.
이러한 객체와 테이블 간 차이 때문에 Team 객체는 반대편 테이블의 외래키를 관리한다.
Team.members 값을 바꿨을 때 TEAM_ID가 업데이트 된다.

아래 코드를 통해 일대다 관계를 설정할 수 있다.
이때 @JoinColumn을 꼭 사용해야 한다.
사용하지 않으면, Member_Team 조인 테이블이 추가로 생기므로 비효율적이다.
//Team.java
@OneToMany
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<>();
Member, Team 객체를 생성한 후 외래키를 업데이트하는 코드이다.
Member member = new Member();
member.setUsername("member1");
em.persist(member);
Team team = new Team();
team.setName("teamA");
team.getMembers().add(member); //외래키 업데이트
em.persist(team);
tx.commit();
외래키가 Team이 아닌 Member 테이블에 위치하므로 Member를 업데이트한다.
따라서 Team, Member 삽입문 외에도 Member 업데이트문이 추가로 나간다.

일대다 단방향 정리
- 일대다 단방향은 일대다에서 일이 연관관계 주인이다.
- 테이블 일대다 관계는 항상 다 쪽에 외래 키가 있다.
- 객체와 테이블의 차이 때문에 반대편 테이블의 외래키를 관리한다.
- 단점
- 엔티티가 관리하는 외래키가 다른 테이블에 있다.
- 연관관계 관리를 위해 추가로 UPDATE문을 실행한다.
- 결론: 일대다 단방향 매핑보다 다대일 양방향 매핑을 사용하자.
일대다 양방향
실제로 일대다 양방향 매핑은 존재하지 않는다.
다만, 읽기 전용 필드를 사용해서 양방향처럼 사용할 수 있다.

Member.team은 insert, update가 되지 않아 읽기 전용 필드이다.
//Member.java
@ManyToOne
@JoinColumn(name = "TEAM_ID", insertable = false, updateable = false)
private Team team;
이 방식은 참고만 하고, 다대일 양방향 매핑을 사용하자.
Reference
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자
www.inflearn.com