[JPA] 양방향 매핑 mappedBy

타미·2020년 10월 11일
0

JPA실험실

목록 보기
5/8
post-custom-banner

개념은 정리해놨는데 코드로 정리를 안해놓으니까 헷갈린다 😥

단방향 매핑이여도 테이블은 연관관계를 맺는다.
양방향은 조회 로직이 추가된 것 뿐이다.
양방향 매핑을 할 때 JPA에 주인이 아니라는 걸 알려주기 위해 mappedBy를 사용한다.


@Entity
public class Instagram {
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "PLACE_ID")
    public Place place;
    ...
}

@Entity
public class Place {
    @OneToOne(mappedBy = "place") // Place가 주인이 아니다!
    public Instagram instagram;
    ...
}
  • 주인은 Instagram
  • Place에는 조회를 위한 매핑을 해준 것
  • mappedBy를 가지는 엔티티가 주인이 아니다.
    • mappedBy=주인이 아닌 쪽

주인이 아닌 쪽에서는 수정이 반영되지 않는다.

    @DisplayName("양방향 OneToOne에서 주인이 아닌 쪽에서 데이터를 등록할 수 없다.")
    @Test
    void test() {
    	// date setup
        Instagram instagram = instagramRepository.save(new Instagram());
        Place place = new Place();
        
        // 주인이 아닌 쪽에 주인 등록
        place.instagram = instagram;

		// 저장
        placeRepository.save(place);

        List<Place> places = placeRepository.findAll();
        assertThat(places.get(0).instagram).isNull(); // 저장되지 않음
    }
profile
IT's 호기심 천국
post-custom-banner

0개의 댓글