김영한 님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'를 듣고 적은 글 입니다.
테이블
객체
연관관계의 주인


외래키를 가지는 곳이 주인이고 주인이 아닌 곳에 mappedby를 사용한다.
양쪽을 서로 참조하도록 개발하여야 한다.
ex code
//Member class
@ManyToONE
private Team team;
//Team class
@OneToMany(mappedby = "team")
private List<Member> members = new ArrayList<>();
실무에서 많이 사용하지 않는 방식이다.
테이블의 일대다 관계는 항상 다쪽에 외래키가 존재한다. 하지만 연관관계의 주인은 일이 맡기때문에 뭔가 꼬여 관리가 어렵다.
객체와 테이블의 차이로 인해 반대편 테이블의 외래키를 관리하는 특이한 구조이기 때문에 @JoinColumn 을 꼭 사용해야 한다. (사용하지 않으면 중간 테이블이 하나 더 만들어짐)
주 테이블이나 대상 테이블 중 외래키를 선택할 수 있다. 이때 외래키에 데이터베이스 유니크(UNI) 제약조건을 추가해야 한다.

이때 MEMBER 테이블이 아닌 LOCKER테이블에서 MEMBER_ID(FK, UNI)를 가져도 상관없다.
주 객체가 대상 객체의 참조를 가지는 것처럼 주 테이블에 외래키를 두고 대상 테이블을 찾는다.
다대일 양방향 매핑처럼 외래키가 있는 곳이 연관관계의 주인이 되며, 반대편은 mappedby를 적용한다.
대상 테이블에 외래키가 존재한다. 이때 단방향 관계는 JPA에서 지원하지 않고, 양방향 관계만 지원한다.
관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 연결 테이블을 추가해 일대다, 다대일 관계로 풀어내야 한다.

객체의 경우 컬렉션을 사용해 객체 2개로 다대다 관계를 표현할 수 있다.
@ManyToMany를 사용하지만 실제 실무에선 사용하지 않는다.
우리는 @ManyToOne, @OneToMany를 사용해 다대다 관계를 표현한다.