OneToOne 외례키 맵핑
특징
- 주키를 공유하는 것이 아니라, 외례키로 관계를 맺는다.
- User---->Address 의 관계에서 User는 Source, Address는 Target.
- Source에서 Target이 한 개씩 맵핑되기 때문에, ManyToOne으로 Unique 속성을 true로 맵핑한다.(XML에서만)
- 양방향으로 맵핑할 때는 Address---->User로 맵핑도 해줘야 한다.
- 하이버네이트에 Address의 user가 반대쪽 관계를 나타내는 속성의 inverse라는 것을 표현해준다.
맵핑하기
- 단뱡향 맵핑
User.java
@OneToOne
@JoinColumn(name="SHIPPING_ADDRESS_ID")
@Cascade( { CascadeType.SAVE_UPDATE })
private Address shippingAddress;
- Address의 주키 속성은 그냥 일반적인 id로 설정하고 기본 주키 생성기를 사용한다. 커스텀 주키 생성기 사용할 필요 없슴.
- 양방향 맵핑
Address.java
@OneToOne(mappedBy = "shippingAddress")
private User user;
- mappedBy를 설정해 주어야 Address에 별도의 외례키 컬럼을 만들지 않는다. 왜? inverse라는
걸 알려줬으니까. inverse? 이건 이미 이 반대 방향의 관계에서 이 둘의 관계에 필요한 속성이 있으니까 불필요한 컬럼(또는
추가적인 SQL)을 만들지 않도록 하이버한테 알려주는 거지.