열을 PK로 승격하면 (일명 관계 식별) 어떻게됩니까? 이제 열이 PK이므로 @Id (...)로 태그를 지정해야합니다.
이러한 향상된 지원 유래 식별자는 실제의 일부 JPA 2.0 새로운 재료 (참조 섹션 2.4.1 기본 키 유도 아이덴티티에 대응 JPA 2.0 명세서), JPA 1.0 허용하지 않는 Id
(A)에 OneToOne
나 ManyToOne
. JPA 1.0에서는 외래 키 열에 대한 매핑 을 사용 PrimaryKeyJoinColumn
하고 정의해야 Basic
Id
합니다.
이제 질문은 @Id + @JoinColumn이 @PrimaryKeyJoinColumn과 동일합니까?
당신은 유사한 결과를 얻을 수 있지만, 사용 수 Id
에 OneToOne
또는 것은 ManyToOne
이다 훨씬 간단 하고 JPA 2.0 파생 된 식별자를 매핑 할 수있는 좋은 방법입니다. JOINED 상속 전략 PrimaryKeyJoinColumn
에서 여전히 사용될 수 있습니다 . JPA 2.0 사양의 관련 섹션 아래 :
11.1.40 PrimaryKeyJoinColumn 주석
그만큼 PrimaryKeyJoinColumn
주석 다른 테이블에 참여하는 외부 키로서 사용되는 기본 키 열을 지정한다.
PrimaryKeyJoinColumn
주석은의 엔티티 서브 클래스의 기본 테이블에 가입하는 데 사용되는 JOINED
슈퍼 클래스의 기본 테이블에 매핑 전략을; SecondaryTable
어노테이션 내에서 2 차 테이블을 1 차 테이블에 결합하는 데 사용됩니다
. OneToOne
참조 엔티티의 기본 키가 참조 엔티티에 대한 외래 키로 사용되는 매핑에 사용될 수 있습니다. [108] .
...
PrimaryKeyJoinColumn
JOINED 매핑 전략에서 하위 클래스에 대한 주석이 지정 되지 않은 경우 외래 키 열은 수퍼 클래스 기본 테이블의 기본 키 열과 동일한 이름을 갖는 것으로 간주됩니다.
...
예: Customer 및 ValuedCustomer 하위 클래스
@Entity
@Table(name="CUST")
@Inheritance(strategy=JOINED)
@DiscriminatorValue("CUST")
public class Customer { ... }
@Entity
@Table(name="VCUST")
@DiscriminatorValue("VCUST")
@PrimaryKeyJoinColumn(name="CUST_ID")
public class ValuedCustomer extends Customer { ... }
[108] 파생 ID 메커니즘 섹션 2.4.1.1에 기재된 해주기 통해 선호한다
PrimaryKeyJoinColumn
OneToOne 매핑 경우에.
또한보십시오
이 소스 http://weblogs.java.net/blog/felipegaucho/archive/2009/10/24/jpa-join-table-additional-state 는 @ManyToOne 및 @Id 사용이 JPA 1.x에서 작동한다고 설명합니다. 이제 누가 맞습니까?
저자는 JPA 1.0 (!)에 대한 기사를 작성하기 위해 EclipseLink 의 사전 릴리스 JPA 2.0 호환 버전 ( 기사 당시 버전 2.0.0-M7 )을 사용하고 있습니다. 이 기사는 오해의 소지가 있습니다. 저자는 JPA 1.0의 일부 아닌 있습니다.
기록을 위해 EclipseLink 1.1 에 Id
on OneToOne
및 지원 ManyToOne
이 추가되었습니다. 이 메시지 에서 제임스 서덜랜드 , EclipseLink가 comitter과의 주요 기여 자바 지속성 위키 책). 그러나 이것은 JPA 1.0의 일부 가 아닙니다 .