2011-02-23 4 views
1

아래 정의는 Hibernate association mapping tutorial hereHibernate 매핑 혼란

각각의 책은 한 출판사와 관련된에서 가져옵니다. 튜토리얼은 게시자에게 책 협회가라고 을 말한다 이유

나는

class Book 
{ 
    Publisher pub; 
} 

class Publisher 
{ 
    Set<Book> books; 
} 

질문 1. 지금은에 같은 혼란 스러워요 자바에서 위의 정의를 아래의 방법을 나타내는 것 "many-to-one" 연결. 내가 생각한 것 "일대 다" 게시자와 책 사이의 연관성이 올바른 접근 방법이었을 것입니다.

질문 2. 아래 도서의 hbm입니다. 게시자의 hbm 매핑에서 일대 다을 선언하면 안됩니다. 이 관계 매핑의 위치를 ​​결정하는 것은 무엇입니까?

<class name="Book" table="BOOK"> 
    <many-to-one name="publisher" class="Publisher" column="PUBLISHER_ID" /> 
</class> 

답변

1

협회을 모두 가질 수는 대일입니다. 이것은 Book이 자신의 Publisher만을 인식한다는 사실과는 관련이 없습니다. 이 연관성은 Hibernate가 기본 표현을 이해하는 것을 돕는 것이다.

일대 다 관계를 Publisher에서 Book까지 선언해도 아무런 문제가 없습니다. 둘 다 가질 수 있습니다. 그것은 당신의 데이터 모델과 어떻게 상호 작용할 계획인지에 달려 있습니다.

2

관계가 양방향인지 여부에 따라 다릅니다. 7.3.2 절 참조 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-mapping.

양방향 관계는 부모에서 자녀 (예 : 출판사 -> 도서)와 자녀 - 부모 (즉, 도서 -> 출판사)간에 이동할 수있는 경우입니다. 부모로부터 자식까지는 일대 다 (one-to-many)이며, 부모로부터 자식까지는 다 대일입니다.

양방향 관계가 필요하지 않습니다. '올바른 접근법'은 애플리케이션에 필요한 것에 정확히 의존합니다. pu.lisher에서 책으로 이동해야하는 경우에는 일대일 만 필요합니다. 책에서 발행인으로 이동하는 것만으로 많은 것을 필요로한다는 것입니다. 발행인 당 많은 책이있을 수 있기 때문에이 둘을해야하는 경우 Book에서 Publisher에/(즉 관계 양방향을)

1

질문 1 : 사실 둘 다 맞습니다. 그것은 관계의 방향에 달려 있습니다. 한 책의 출판사에 속한 많은 책들은 책의면에서 다분히 하나의 관계를 맺습니다.

질문 2 : 양방향 관계에 관심이 있다면 실제로는 한쪽에 하나, 다른 한쪽에 다수를 배치 할 수 있습니다. 그러나, mappedBy 속성을 사용하여 hibernate가 양 끝에서 정의 된 동일한 관계를 갖도록주의해야합니다.

1

관계는 단방향 또는 양방향 일 수 있습니다.

Java 코드에서 디자인 한 방식대로 양방향입니다.보기의 책 지점에서

  1. : 이것은 (외래 키에 의해 구체화) 동일한 물리적 관계는 두 개의 논리적 관계로 볼 것을 의미 몇 권의 책이 출판사에서 한 출판사 (ManyToOne)
  2. 에 의해 게시 견해 : 한 출판사가 여러 권의 책을 출판합니다 (OneToMany)

귀하가 질문에 표시하는 XML 매핑은 관계의 한면을 설명합니다. 그러나 당신이 그것을 양방향으로 만들고 싶다면, 상대방을 선언해야합니다. 측면 중 하나는 다른 측면의 역으로 ​​선언됩니다.

Hibernate는 퍼블리셔 클래스 (단방향 1 대 다수), 또는 책 클래스의 출판사 참조 (단방향 many to one) 또는 둘 다 (bidirectional one to many/많은 것을 하나).

자세한 내용은 the documentation을 참조하십시오.

관련 문제