[JPA] 1 대 다 매핑

Junseo Kim·2020년 3월 21일
2
post-thumbnail

1 대 다 매핑

Account, Study 엔티티를 추가해준다.

관계는 오직 2개의 entity끼리의 관계이다.
Study와 Account의 관계를 설정해보겠다.

단방향

한 사람은 여러개의 Study를 만들 수 있다.
따라서 Study 입장에서는 ManyToOne 이다.(클래스 안의 reference가 collection이 아니라 하나이면 One으로 끝난다).

Runner에서 Study를 생성해준 후 실행해보겠다.

실행시키면, Study라는 테이블에 Account 테이블의 PK를 참조하는 foreign key Column을 생성해서 가지고 있게 된다.

이 관계 예시의 주인은 Study이다.

반대로 한 번 해보겠다.
Account에서 Study를 관리해보려고한다.
Account는 자기가 만든 Study 목록을 가지고 있다.

Account 입장에서는 collection을 가지고 있으므로 @OneToMany이다.

Runner에서 account에 study를 더해준 후 실행해보겠다.

join테이블로 생성된다.


양방향

위에서 살펴본 두 가지 관계를 모두 정의한다고 해도 양방향 관계가 아니다. 단지 2개의 단방향 관계인 것이다.

양방향으로 만들려면, OneToMany 쪽에 mappedBy로 연결시켜줘야한다.(관계를 정의한 그 필드를 적어줘야한다.)

ManyToOne 쪽이 주인이다.

양방향 일 때는 foreign key를 가진쪽이 주인이다.

양방향인 경우는 꼭 주인쪽에 데이터를 넣어줘야한다. 그렇지않으면 데이터가 들어가지 않는다.(반대경우는 Optional이지만 객체지향적으로 볼때는 넣어줘야한다. 즉, 한 묶음으로 같이 적어주는게 좋다)

위의 코드를 아래와 같이 바꿀 수도 있다.

이런 메서드를 convenience method라고 부른다.

remove 할 때도 마찬가지로 양쪽 모두 해제해줘야한다.

0개의 댓글