Lazy Fetching [하이버네이트] 빌드 타임 인스트루먼트로 OneToOne Lazy Fetching하기 어제 작성한 글에서 이어집니다. 그 해결책 세개 중에서 그나마 쓸만한 해결책은 이것이고, 그 효과도 똑같고, 그 단점도 똑같은 방법입니다. @OneToOne 맵핑에 @LazyToOne(LazyToOneOption.NO_PROXY)를 추가합니다. [java] @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private BigDecimal price; private
Lazy Loading [하이버네이트] OneToOne 연관 관계 Lazy Fetching이 안 먹어!? OneToOne 관계를 맵핑 했을 때, Lazy Fetching이 제대로 적용되는 경우가 있고, 그렇지 않은 경우가 있다. 우선 제대로 동작하는 경우부터 볼까나… Product 1 –> 1 ProductDetails Product 1 –> 1 ProductInfo 이렇게 OneToOne 관계가 두 개 있다고 가정하고, 다음과 같이 맵핑했다. [java] @Entity public class
하이버네이트 OneToOne Join Table 맵핑 특징 만약 One To One 관계에 있는 두 Entity가 optional 하다면… 이전에 배운 외례키 사용하는 맵핑을 한 다음에, 외례키를 nullable하게 설정하게 할 수 있겠지만… 관계에 추가적인 속성이 추가될 수도 있을테니, 두 Entity의 id를 모두 unique하게 가지고 있고, Join Table을 만들 수도 있다.
하이버네이트 OneToOne 외례키 맵핑 특징 주키를 공유하는 것이 아니라, 외례키로 관계를 맺는다. User—->Address 의 관계에서 User는 Source, Address는 Target. Source에서 Target이 한 개씩 맵핑되기 때문에, ManyToOne으로 Unique 속성을 true로 맵핑한다.(XML에서만) 양방향으로 맵핑할 때는 Address—->User로 맵핑도 해줘야 한다. 하이버네이트에 Address의
하이버네이트 주키를 공유하는 맵핑 특징 두 테이블에서 같은 주키값을 사용한다. 문제는 A–>B 에서 B가 A의 주키값을 사용하도록 하는 것이다. 주기를 공유하도록 설정해야 한다. 맵핑하기 JPA는 공유할 주키 생성기를 지원하는 표준화된 방법이 없다. 하이버네이트는 커스텀 id 생성기를 위한 확장 애노테이션을 제공한다. User.java @OneToOne@PrimaryKeyJoinColumn@Cascade(
하이버네이트 Single-valued entity 연관 User에 Component로 맵핑했던 Address를 별도의 테이블로 구분하고 싶을 수 있다. 다른 Entity에서 Address를 공유할 수 있다. 이럴 때 1:1 맵핑이 된다. 주키를 공유하는 맵핑 OneToOne 외례키 맵핑 Join Table 맵핑