@JoinColumn
과 의 정확한 차이점은 무엇입니까 @PrimaryKeyJoinColumn
?
@JoinColumn
외래 키의 일부인 열에 사용 합니다. 일반적인 열은 다음과 같을 수 있습니다 (예 : 추가 속성이있는 조인 테이블).
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
열을 PK로 승격하면 (일명 관계 식별) 어떻게 되나요? 이제 열이 PK이므로 다음과 @Id
같이 태그를 지정해야합니다 .
@Id
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
이제 질문은 다음과 같습니다.
있습니까 @Id
+ @JoinColumn
단지와 같은 @PrimaryKeyJoinColumn
?
@ManyToOne
@PrimaryKeyJoinColumn(name = "...")
private OtherClass oc;
그렇지 않다면 무엇을 @PrimaryKeyJoinColumn
위해 있습니까?
답변
열을 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의 일부 가 아닙니다 .