김영한 님의 강의를 들으며 복습하던 도중 궁금한 점이 생겼다.
다음을 보면 둘 다 연관관계를 맺는 부분인데, 위에는 @JoinColumn이 사용되었고, 밑에는 사용되지 않았다.
그러나 실행 결과를 보면
둘 다 잘 생성된다.
그렇다면 @JoinColumn을 생략해도 가능하다는 것인데, 그럼 @JoinColumn은 왜 사용하는 것일까?
혼동하면 안되는 것은 여기서 지정한 name의 값은 현재 테이블(@JoinColumn을 적용 하는 필드를 가진 테이블)에서 대상 테이블의 외래 키를 가질 컬럼 이름을 지정하는 것 이다.
ex) 위 예시에서는 Orders 테이블에 MEMBER_ID 컬럼 이름으로 Member 외래 키를 저장한다.
이 옵션 값이 대상 테이블에서 어떤 컬럼을 가져와서 나의 테이블에 외래 키로 저장할 지를 지정하는 값이다. 예시에서는 생략되어 있는데 생략 시 대상 테이블의 pk값을 가져온다. 이는 이대로 사용하는 것이 좋다.
또한 ManyToOne만 생략해도 기대한 대로 작동하지 OneToMany 관계에서는 생략해서는 안된다고 한다.
https://hyeon9mak.github.io/omit-join-column-when-using-many-to-one/