JPA : @JoinColumn과 @PrimaryKeyJoinColumn의 차이점은 무엇입니까?
@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] ....
PrimaryKeyJoinColumnJOINED 매핑 전략에서 하위 클래스에 대한 주석이 지정 되지 않은 경우 외래 키 열은 수퍼 클래스 기본 테이블의 기본 키 열과 동일한 이름을 갖는 것으로 간주됩니다....
예 : 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에 기재된 이제 위에 선호한다
PrimaryKeyJoinColumnOneToOne 매핑 경우에.
또한보십시오
이 소스 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의 일부 가 아닌 것을 사용하고 있습니다.
공식적으로, 지원 Id에 OneToOne하고 ManyToOne는 EclipseLink 1.1에 추가되었습니다 (볼 이 메시지 에서 제임스 서덜랜드 , EclipseLink가 comitter과의 주요 기여 자바 지속성 위키 책). 그러나 이것은 JPA 1.0의 일부 가 아닙니다 .
일반적으로이 다이어그램을 통해이 두 가지를 구분합니다.
사용하다 PrimaryKeyJoinColumn
사용하다 JoinColumn
나는 이것이 오래된 게시물이라는 것을 알고 있지만 PrimaryKeyColumn, 단방향 관계를 원하거나 모두 동일한 ID를 공유하는 여러 테이블이있는 경우 사용하기에 좋은시기 입니다.
일반적으로 이것은 나쁜 생각이며 외래 키 관계를와 함께 사용하는 것이 좋습니다 JoinColumn.
그러나 이와 같은 시스템을 사용하는 이전 데이터베이스에서 작업하는 경우에는 사용하기에 좋은시기입니다.
'code' 카테고리의 다른 글
| Java 및 .NET 기술 / 프레임 워크의 유사점 (0) | 2020.10.22 |
|---|---|
| id = 1-id 원자입니까? (0) | 2020.10.22 |
| 파이썬에서 클래스를 확장하는 방법은 무엇입니까? (0) | 2020.10.22 |
| Android 뷰 수명주기 (상태 다이어그램)를 그래픽으로 표현한 것이 있습니까? (0) | 2020.10.22 |
| Android 스튜디오에는 어떤 JDK 버전 (언어 수준)이 필요합니까? (0) | 2020.10.22 |

