2013-08-27 2 views

답변

28

그들은 정확히 스키마에 같은 보이지만 최대 절전 계층에 차이가있다. 당신이 뭔가를하려고하면

:

Address address = new Address(); 
Order order1 = new Order(); 
order1.setAddress(address); 
Order order2 = new Order(); 
order2.setAddress(address); 
save(); 

모든 것이 확인 될 것입니다.

물론
@OneToOne case: 
org.hibernate.HibernateException: More than one row with the given identifier was found: 1 

@ManyToOne case: 
SUCCESS 

, 당신의 주소 클래스는해야 두 경우 모두 다른 모양 : 당신이 주문을받을하려고하지만, 이후에 저장합니다.

+0

두 매핑을 전환해도 괜찮을까요? –

+1

"두 매핑간에 전환"이란 무엇을 의미합니까? 기존 데이터베이스 스키마가 있고 응용 프로그램에서 매핑 주석을 변경하기로 결정한 경우 @OneToOne에서 @ManyToOne으로 스키마를 변경하지 않고도 할 수 있습니다. 다른 방법으로도 할 수 있지만 데이터에 문제가있을 수 있습니다. – paulek

+1

미래의 사람은 누구나 paulek의 글을 읽어야합니다. 귀하의 인격은 그 실수를 저지르기 위해 너무 낮습니다. 단방향 관계 만있는 경우 해당 오류는 표시되지 않습니다. 양방향 관계가있는 경우, 조인을 페인팅하는 조인으로 선택된 주소에서만 해당 오류가 생성됩니다. –

5

은 일반적으로 address_id에 고유 제한 조건은 단 하나 개의 주문이 주어진 주소를 가질 수 있음을 보장하는 OneToOne 협회의 경우 열 가입이 있어야합니다.

+0

는 최소한의 MySQL과는 "독특한"유형의 인덱스와 외부 키를 만듭니다. –

+0

로 표시되지 않습니다 – borjab

0

이것은 관계의 양쪽 가장 동일한 기본 키를 구비하여 제공된다 나타낸다. @OneToOne 관계의 경우에는 양측이 하나의 순서 만 연결되기 때문에이 방법은 makes more sense입니다.

이 경우