2017-12-22 22 views
0

나는 최대 절전 모드를 배우며 두 엔티티 (OneToOne, OneToMany, ManyToMany) 간의 관계를 설정하는 방법을 이해하려고합니다. 간단한 경우를 생각해 볼 수 있습니다 :최대 절전 모드에서 엔티티 간의 OneToMany 또는 ManyToOne 관계를 읽는 방법?

사용자 엔티티 :

@Entity 
class User { 
    @Id 
    private userId; 

    private Vehicle vehicle; 

    // other code 
} 

차량 엔티티 :

@Entity 
pubic class Vehicle { 
    @Id 
    private int vehicleId; 
    private String desc; 

    // other code 
} 

내 목표는 지정하는 것입니다 : UserVehicle 엔티티 사이의

One to Many relationship 또는 One to one 관계.

나는 OneToOne, OneToMany 주석이 있지만이 관계가 어떻게 해석되는지 이해할 수 없다는 것을 알고 있습니까? 그것은 어떤 엔티티가 다른 엔티티에 배치되는지에 따라 좌우됩니까? 예를 들어

는 :

@Entity 
class User { 
    @Id 
    private userId; 

    private Vehicle vehicle; 

    // other code 
} 

우리가 볼 수 있듯이, 나는 User 기업 내부의 Vehicle 개체를 배치하고 내가 Vehicle 기업의 상단에 OneToMany 주석을 사용하는 경우, 그것은 일을 의미 하는가 : User를 사이에 M 관계를 ->Vehicle 엔티티.

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

+2

많은 자동차와 사용자가, 차량의 컬렉션 매핑해야하고, 사용자 필드에게 답장을 보내 – Zeromus

+0

감사를 매핑 다른 필드를 지정해야합니다; 그러나 나의 의심은 변하지 않습니다. 우리는 어떻게 그 관계를 해석합니까? 그것은 다른 엔티티에 내장 된 엔티티를 기반으로합니까? – CuriousMind

+1

[this] (https://stackoverflow.com/a/21068644/6413377)을 확인할 수 있습니다. 그럼 [this] (https://stackoverflow.com/a/15902607/6413377). 예, 'User' (1) (m)'차량 '. 그리고 Zeromus가 말했듯이'private Collection vehicles;는'User'에서 사용해야합니다. – pirho

답변

1

나는 이것에 대한 대답을 더 잘 설명 할 것이지만, 실제로는 최대 절전 모드 매핑의 기본이며, 온라인 튜토리얼에서 읽을 수있을 것입니다. 사용자 테이블되면서

:

userId userName etc 

차량 테이블은 명백한 한 많은 관계

vehicleId userIdFK etc 

되는 하나 이상의 사용자 차량.

당신이

@Entity 
class User { 
    @Id 
    private userId; 

    private String userName 

    // other code 
} 

@Entity 
pubic class Vehicle { 
    @Id 
    private int vehicleId; 
    private String desc; 

    @ManyToOne 
    @JoinColumn(name = "userIdFK", referencedColumnName = "userId") 
    private User user; 
    // other code 
} 

이이 관계를 이것은 당신이 최대 절전하자 FK의 존재를 알고 그냥 필수가 단방향 매핑로 알고 있는지되고 매핑하려면

관계 유형을 지정하는 @ManyToOne (한 차량은 한 명의 사용자)

@JoinColumn은 "Hey hibernate Vehicle 테이블에 사용자 테이블쪽으로 FK가 있습니다"라고 말하면서 Fk에 관련된 db 열 이름 인 referencedColumnName과 referencedColumnName이 사용됩니다.

당신이 원하는 경우 양방향으로 릴레이 연결을 만들 수 있습니다.이 옵션은 때때로 소유권이없는 쪽 (이 경우 사용자와 차량)의 참조를 추가 할 때 유용합니다. 따라서 두 클래스에서 다른

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

    @OneToMany(mappedBy = "user") 
    private List<Vehicle> vehicleList; 
    // other code 
} 

MappedBy는 차량 엔티티에 관계