2017-12-24 30 views
0

나는 최대 절전 모드를 배우며 Owning-sideNon-owing side이라는 용어를 발견했다.최대 절전 모드 : 둘 다 소유 측면에있는 엔티티간에 관계를 가질 수 있습니까?

읽고 난 후, Owning-side은 다른 엔터티에 대한 FK 참조를 가진 엔터티를 의미한다는 것을 알게되었습니다.

사용자 엔티티 :

@Entity 
public class User { 
    @Id 
    private int userId; 
    private String userName; 

    @OneToOne 
    @JoinColumn("VEHICLE_ID") 
    private Vehicle vehicle; 
    // other code 
} 

차량 엔티티 :

@Entity 
public class Vehicle{ 
    @Id 
    private int vehicleId; 
    private String vehicleName; 

    @OneToOne 
    @JoinColumn("USER_ID") 
    private User user; 
    // other code 
} 

나는이 두 엔티티의 @JoinColumn을 유지하는 경우, 다음 것이 두 기관 User

는 다음과 같은 경우를 생각해 볼 수 있습니다 Vehicleowning-side 엔티티가 되나요?

@JoinColumn 주석을 달아 엔티티를 owning-side 엔티티로 지정하는 이유는 무엇인지 이해할 수 없습니다.

아무도 이해할 수 있습니까?

+1

때문에 당신이 FK 참조를 유지하는 사람이 소유하는 쪽 말했듯이. 조인 열은 해당 테이블에서 Fk의 존재를 구분하기 위해 사용되므로 효과적으로 소유 측면을 만듭니다 – Zeromus

답변

1

나는이 엔티티 모두에서 @JoinColumn을 유지하는 경우는, 다음 모두 이러한 엔터티 사용자 및 차량 소유 측 엔티티가 될 것?

엔티티에서 @JoinColumn을 사용하는 것으로 시작한 다음 특정 엔티티가 소유주임을 명시합니다. 사실 그 반대가 사실입니다.
먼저 엔티티가 소유해야하는 엔티티와 비 소유가되어야하는 엔티티를 결정합니다.
그리고 어떤 엔티티가 외래 키 참조를 가지고 있는지 확인합니다. 그리고 이것은 다시 디자인의 선택입니다. 외래 키 참조가있는 것은 소유 엔터티이라고합니다.
그런 다음 소유 엔티티에서 @JoinColumn annottation을 사용하여 외래 키를 지정합니다.
비 소유 측면에서는 특정 연관 유형의 내부에 mappedBy 속성을 사용합니다.

예제에서 양방향 관계를 지정하고 있습니다. 따라서 Vehicle 엔티티가 foreignKeyuserId으로 간주되는 경우 Vehicle 엔티티가 우리 소유 엔티티가되며이 'userId'에 '@JoinColumn'주석을 붙입니다.
그리고 비 소유하는 엔티티 즉, 사용자 단체, 우리는 @JoinColumn가 사용 된있는 법인 소유의 필드를 참조하는 'mappedBy'속성을 사용합니다 :

@Entity 
public class User { 
    @Id 
    private int userId; 
    private String userName; 

    @OneToOne(mappedBy="user") 
    private Vehicle vehicle; 
    // other code 
} 


@Entity 
public class Vehicle{ 
    @Id 
    private int vehicleId; 
    private String vehicleName; 

    @OneToOne 
    @JoinColumn("USER_ID") 
    private User user; 
    // other code 
} 

Here은 도움이 될 수 있습니다 자세한 설명서입니다 당신은 참조로 :

JPA API 참조 문서는 다른 연결 유형에 대한 좋은 간단한 설명을 제공 : OneToOne, OneTomany, ManyToMany