인프런 강의 < 자바 ORM 표준 JPA 프로그래밍 - 기본편 > 정리
@ManyToOne@OneToMany@OneToOne@ManyToMany2번 해야됨
다대일은 외래 키가 있는 쪽이 연관관계의 주인이며 양쪽을 서로 참조한다.

일대다는 1이 연관관계의 주인이고 다쪽에 외래 키가 있다.
@JoinColumn을 꼭 사용해야 하고 그렇지 않을 경우 중간에 테이블을 추가해서 조인 테이블 방식 사용한다.
@JoinColumn에 parameter로 insertable = false, updatable = flase 를 넣어야 한다.
단점으로 엔티티가 관리하는 외래 키가 다른 테이블에 있고, 연관관계 관리를 하기 위해서 UPDATE SQL을 실행해야 한다.
본인 테이블에 외래 키가 있으면 한번의 INSERT SQL로 끝낼 수 있다.
외래 키를 주 테이블 또는 대상 테이블 중에 선택이 가능하며, 외래 키에 데이터베이스 유니크 제약조건을 추가한다.
외래 키를 객체 참조와 비슷하게 사용할 수 있어서 객체지향 개발자들에게 선호된다.
단점은 값이 없을 때 외래 키에 null이 허용 된다.
이 방법은 주 테이블이 외래 키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블과 연관관계가 있는지 알 수 있다.

다대일 양방향 매핑 처럼 외래 키가 있는 곳이 연관관계의 주인이며 반대편은 mappedBy 적용해준다.
전통적인 데이터베이스 개발자들이 선호하며, 이 방법의 장점은 테이블 관계를 일대일에서 일대다로 변경할때, 테이블 구조를 그대로 유지할 수 있다.
단점은 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 즉시 로딩이 된다.

대상 테이블 외래 키는 단방향 매핑을 지원하지 않는다.
관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.
연결 테이블을 추가해서 일대다, 다대일로 연결해야 된다.
객체는 컬렉션을 사용해서 양쪽 객체에 리스트를 선언하면 다대다가 가능하지만, 데이터베이스에서는 할 수 없다.
@ManyToMany를 사용하고 @JoinTable로 연결 테이블을 지정한다.
양방향, 단방향 모두 가능!
< 자료 출처: 자바 ORM 표준 JPA 프로그래밍 - 기본편 >