2017-05-08 12 views
1

나는 다음과 같은 관계를외래 키를 포함하는 복합 기본 키를 모델링하는 방법은 무엇입니까? 보시다시피

enter image description here

을 가지고 feature_affinities의 세부 사항 테이블 구성 요소를 그것을 외부 키의 복합 키 (feature_id, zoom), features의 마스터 테이블을 참조있다.

나는이 올바른가

@Entity 
@Table(name = "features") 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "subtype_id", discriminatorType = DiscriminatorType.INTEGER) 
public class Feature { 

    @Id 
    @Column(name="id") 
    @GeneratedValue(generator="sqlite") 
    @TableGenerator(name="sqlite", table="sqlite_sequence", 
     pkColumnName="name", valueColumnName="seq", 
     pkColumnValue="features") 
// @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Getter 
    @Setter 
    private long id; 

... 

@Embeddable 
public class FeatureAffinitiesKey implements Serializable { 

    @ManyToOne 
    @JoinColumn(name = "feature_id") 
    @Getter 
    @Setter 
    private Feature feature; 

    @Column(name = "zoom") 
    @Getter 
    @Setter 
    private Long zoom; 
} 

@Entity 
@Table(name = "feature_affinities") 
public class FeatureAffinities { 

    @Getter 
    @Setter 
    @EmbeddedId 
    private FeatureAffinitiesKey key; 

... 

가 썼다?

혼란 스럽습니다. FeatureAffinitiesKey을 직렬화 할 수 있다고 주장했습니다. 그러나 Feature fiels가 포함되어 있기 때문에 Feature도 serializable이어야하고 또한 Feature 내부의 모든 복합 관련 클래스가 있어야합니다.

정상입니까?

답변

1

JPA 스펙이 "파생 된 ID"를 호출하는 것입니다. 당신은 약간 다르게 FeatureAffinities 클래스를 정의해야합니다

@Embeddable 
public class FeatureAffinitiesKey implements Serializable { 

    @Column(name = "feature_id") 
    @Getter 
    @Setter 
    private long featureId; // corresponds to the type of Feature's PK 

    @Column(name = "zoom") 
    @Getter 
    @Setter 
    private Long zoom; 
} 

@Entity 
@Table(name = "feature_affinities") 
public class FeatureAffinities { 

    @Getter 
    @Setter 
    @EmbeddedId 
    private FeatureAffinitiesKey key; 

    @MapsId("featureId") // maps 'featureId' attribute of embedded id 
    @ManyToOne 
    @Getter 
    @Setter 
    private Feature feature; 

    ... 
} 

FeatureAffinities.feature@MapsId 주석.

유도 된 신원은 2.4.1 절의 JPA 2.1 스펙에서 논의됩니다.