2016-08-30 2 views
0

Person과 Car라는 두 엔티티가 있습니다.하나의 속성이 엔티티 인 최대 절전 모드 OneToOne 양방향 매핑

는 나는이 같은 양방향 매핑을 수행 할 수 있습니다 알고

@Entity 
public class Person implements Serializable { 

    @Id Integer id; 

    @OneToOne 
    @JoinColumn(name = "car_id") 
    Car car; 
} 

@Entity 
public class Car implements Serializable { 

    @Id Integer id; 

    @OneToOne(mappedBy = "car") 
    Person person; 
} 

this answer에 의해 영감을 된.

그러나 Car 엔티티에 전체 Person 엔티티를 저장하고 싶지 않습니다. 차를 다음과 같이 보길 원합니다.

@Entity 
public class Car implements Serializable { 

    @Id Integer id; 

    Integer person_id; 
} 

두 개의 엔티티간에 여전히 양방향 매핑이 있습니다. 이것을 할 수있는 방법이 있습니까?

+0

두 개체 ** 개체 **가 서로 참조 할 때 양방향 관계가 존재하기 때문에 실제로는 그렇지 않습니다. 그러므로 생성시'Car' 인스턴스에 설정하지 않는 한'Car' 클래스에'person_id'를 가질 수 없습니다. – px06

답변

0

첫 번째로 하나의 엔티티를 다른 엔티티와 연결할 때 관련 엔티티의 데이터베이스 인 id 속성은 [ManyToOne의 경우 동일한 테이블 또는 ManyToMany의 경우 JoinTable] 외래 키로 저장됩니다. 따라서, 데이터베이스의 관점에서 볼 때, [외래 키 (foreign key)와 별도의 여분의 오버 헤드가 없음]이 최적화됩니다.

Java OOP 관점에서, 귀하의 한 엔티티는 다른 엔티티를 필드로 포함합니다. 이것은 실제 응용에서 도움이되지 않습니다. 그러나 모든 경우에 다른 관련 엔티티를 원하지 않는다면 JPA가 제공하는 lazy loading facility를 사용할 수 있습니다. 기본적으로 가져 오기 유형은 Lazy입니다. 의미, 데이터베이스에서 객체를 가져 오면 연관된 다른 객체에 대해 null 값을 가지며 실제로 해당 객체를 사용할 때 초기화됩니다.

귀하의 경우 Person은 소유 엔티티이고 Car는 소유 엔티티이며 데이터베이스 Person 테이블에는 차 ID가 외래 키입니다. Car에는 id 열만 있지만 외부 키는 사람 ID가 없습니다.