컬렉션과 조인한다는 것은 데이터베이스 테이블로 보면 일대다 조인입니다.
컬렉션 즉시 로딩은 항상 외부 조인을 사용합니다.
이부분 설명에서 이해가 안되는 부분이 있었습니다.
회원 테이블과 팀 테이블을 조인할 때 회원 테이블의 외래 키에 not null 제약조건을 걸면
모든 회원은 팀에 소속되므로 항상 내부 조인이 가능합니다.
그럼 반대로 팀 테이블에서도 똑같이 제약조건 설정하면 되는거 아닌가? 생각이 듭니다.
결론적으로, 외래키는 항상 다 쪽에 있으므로 불가능 합니다.
그래서 팀 테이블에서 회원 테이블로 일대다 관계 조인할 때, 회원이 한 명도 없는 팀을 내부 조인하면 팀까지 조회되지 않는 문제가 발생합니다.
따라서 일대다 관계를 즉시로딩할 때 항상 외부 조인을 합니다. 그래야 모든 팀을 조회할 수 있습니다.
nullable 설정에 따른 조인 전략
위의 설명에 의해 결국 null에 따라 조회범위가 달라집니다.
@JoinColumn(nullable = true) : NULL 허용. 외부 조인 사용 or @ManyToOne.optional = false로 설정해도 내부 조인입니다.
@JoinColumn(nullable = false) : NULL 허용x, 내부 조인 사용
@JoinColumn이란?
엔티티 필드가 다른 엔티티에 대한 외래 키 관계를 맺고 있을 때, 그 관계를 매핑할 때 사용합니다.(ex. @MayToOne일 때)