2014-04-10 2 views
1

내가 다음과 유사한 개체 모델을 갖고 있다고 할 수 있습니다. 여기에 설명 된대로 나는, 접근 방식 '클래스 당 가입 표'로 이동합니다 선택한 : http://java.dzone.com/articles/jpa-implementation-patterns-mapping매핑 JPA 엔티티는 상속 계층 구조

그래서 기본적으로 나는 Vehicle 부모 테이블이, SUVHybrid 테이블 Vehicle에 외부 키를 갖는. 이 솔루션을 선택한 이유는 정규화 된 스키마가 마음에 들었고 또한 Vehicle.guid이 전 세계적으로 고유해야하기 때문에 해당 테이블이있는 부모 테이블을 사용하면 개별 테이블 전체에 분산되는 대신 UNIQUE 제약 조건을 단순화 할 수 있습니다.

저는 아직 JPA에 새로운 것이므로 JPA 엔티티로 설정하는 방법을 모릅니다. 클래스 Vehicle은 MappedSuperclass가 될까요? 또한 각 엔티티에 @Id를 추가해야하지만, SUVHybridVehicle 테이블에 외래 키를 사용합니까, 아니면 하위 테이블의 기본 키를 식별자로 사용해야합니까?

미리 감사드립니다.

답변

1

id는 전체 계층 구조에 대해 한 번 정의되고 상속되므로 Vehicle 클래스의 @Id 특성으로 충분합니다.

@MappedSuperclass은 클래스가 별도의 테이블에 매핑되지 않고 자식 테이블의 일부임을 의미합니다. 정규화 된 스키마를 원하면 Vehicle도 엔티티로 만드십시오.

하위 엔티티에 외래 키를 정의 할 필요가 없습니다. 이는 지속성 공급자가 수행하며 개발자에게는 투명 할 수 있습니다.

JOINED 상속 전략이 기본값 SINGLE_TABLE 전략보다 성능이 떨어집니다. SINGLE_TABLE은 더 많은 공간을 필요로하며 파생 된 엔티티에 대해 null을 허용하지 않는 열을 실제로 지원하지 않습니다.

+0

귀하의 제안에 따라 나는 Vehicle, SUV 및 Hybrid 모든 Entities를 보유하고 있습니다. 'Vehicle'은 @Id를 가지고 있고,'SUV','Hybrid'는 @Id가 없으며 필요한 @Column 만 있습니다. 내가 그 설치와 함께 SUV를 유지하려고 노력할 때, 나는 그 테이블 차량이 발견되지 않는다는 것을 알리는 오류를 얻었고 그 바로 아래에 Vehicle과 SUV 테이블의 모든 열을 포함하는 테이블 차량에 대한 진술을 준비하는 시도가있다. PU가 계층 구조를 실현하는 것처럼 보이지 않습니다. 어떤 아이디어? – user1491636

+0

SUV 엔티티에서 @PrimaryKeyJoinColumn (name = "VehicleId", referencedColumnName = "VehicleId") 및 Vehicle 엔티티에서 @Inheritance (strategy = InheritanceType.JOINED)가 누락되었습니다. 위의 준비된 stmt 문제가 해결되었지만 여전히 테이블을 찾을 수 없습니다. – user1491636

+0

이상하게도, 내 영속성 유닛에서 테이블 생성 전략을 변경하면 모든 것이 정상적으로 작동합니다. 테이블이 생성 된 곳을 찾을 수 없습니다. 내가 보지 못하는 영속성 단위에 관한 문제 여야합니다. 그러나 최소한 지속성은 작동합니다 :) 감사합니다. – user1491636