2014-07-09 1 views
1

나는 간단한 Person 클래스가있는 경우 :OneToOne과 OneToMany가 Hibernate에서 양쪽에 매핑 될 필요가 있습니까?

public class Person { 
    @OneToOne 
    private Address address; 

    @OneToMany 
    private List<Car> cars; 
} 

AddressCarPerson 필드가 필요합니까를? 대부분의 자습서는 양방향 통신이 있다는 것을이 방법으로 보여줍니다.

하지만 제 경우에는 사람의 주소와 자동차 만 있으면되지만 주소 나 자동차의 사람은 필요하지 않습니다.

당신은 어떻게 그것을 Hibernate에서 매핑 할 것입니까? mappedBy에 대한 책임은 누구에게 있습니까?

+0

@Amogh OK; 하지만 '자동차'에 '사람'이없고 CAR 테이블에 사람이 FK를 갖고 싶다면 최대 절전 모드를 선택하십시오. 아마도 당신이 의미하는 바를 예를 쓸 수 있을까요? – Queequeg

+0

내 첫 코멘트에 대해 유감스럽게 생각합니다. 'OneToMany'에서는'사람 '을 차 안에 두어야 만 한 사람 만 얻을 수 있습니다. 많은 돈이 있습니다. – Amogh

+0

@Amogh 아니, 그렇지 않습니다. CAR 테이블에 조인 열이 있어야하지만 Car 엔터티는 소유자를 전혀 알 수 없습니다. 'JoinColumn' 주석을 살펴보십시오. 이를 구현하기 위해 Person 클래스에서 사용할 수 있습니다. – kostja

답변

2

단방향 @OneToOne 프라이 머리 키 연관 :

@Entity 
@Table(name="person") 
public class person{ 

@Id 
@Column(name="person_id") 
@GeneratedValue  
private Integer personId; 

private String name; 

@OneToOne(cascade=CascadeType.ALL) 
@PrimaryKeyJoinColumn 
private address address; 

//getters & setters 

} 

@Entity 
@Table(name="address") 
public class address{ 

@Id 
@Column(name="address_id")  
private Integer addressId; 

private String street; 

//getters & setters 

} 

단방향 @OneToMany 프라이 머리 키 연관 :

@Entity 
@Table(name="person") 
public class person{ 

@Id 
@Column(name="person_id") 
@GeneratedValue  
private Integer personId; 

private String name; 

@OneToOne(cascade=CascadeType.ALL) 
@PrimaryKeyJoinColumn 
private address address; 

@OneToMany(cascade=CascadeType.ALL) 
@JoinColumn(name = "person_id") 
private List<car> cars; 


//getters & setters 

} 

업데이트

그것은 어떻게 기업이 할 수있는 당신에게 명확해야 단 하나의 열에 많은 ID를 유지 하시겠습니까?

항상 많은면이 한 쪽만 자식 개체를 보관할 수있는 목록이있는 foeign 키의 단일 개체를 갖습니다.

여기에는 두 가지 옵션이 있습니다. 1) 특정 테이블을 사용하여 One과 Many 엔터티 간의 관계를 저장하십시오.

@ManyToOne 
private person person; 

http://deepeshdarshan.wordpress.com/2012/11/29/hibernate-many-to-one-unidirectional-mapping-using-annotation/

이 : 이런 식으로 뭔가 : 우리는 또한 같은 쓰기 자동차 클래스 있도록

@OneToMany(cascade=CascadeType.ALL) 
@JoinColumn(name = "person_id") 
private List<car> cars; 

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch07.html#collections-mapping

2) 또한 많은 자동차를 말할 수는 한 사람에 속한다 정보는 일대 다 및 다 대일 단방향 매핑 용입니다.

+0

내 모바일에서 답변을 올리므로 일부 구문 msitake가있을 수 있습니다. find를 사용하면 diff가있을 경우 언제든지 문의하십시오. – Amogh

+0

감사합니다. 따라서 외래 키가있는 추가 열은 항상'Address'와'Car' 테이블이나'Person' 테이블에있을 것입니다. – Queequeg

+2

@Queequeg, 'OneToOne'에는 어떤 테이블에도 외래 키 열이 없습니다. 'OneToMany'의 경우 여기에 우리의 경우'car'의 많은면이 외래 키를 가질 것입니다. 답변은 적절한 설명으로 업데이트됩니다. – Amogh