2017-05-08 18 views
1

見ての通り、私はfeature_affinitiesの詳細テーブルが複合キー(feature_idzoom)を持って、次の関係外部キーを含む複合主キーをモデル化するにはどうすればよいですか?

enter image description here

を持っている、のコンポーネントそれ外部キー、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フィールが含まれているので、Featureもシリアライズ可能でなければなりません。また、すべてのコンパイル関連のクラスも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注釈。

派生IDについては、2.4.1項のJPA 2.1仕様で説明しています。

関連する問題