3.2.6. 複合プライマリおよび外部キーのマッピング


複合プライマリキーは組み込みクラスをプライマリキー表現として使用します。したがって、@Id アノテーションと @Embeddable アノテーションを使用します。または、@EmbeddedId アノテーションを使用できます。依存クラスはシリアル化できる必要があり、equals()/hashCode() を実装することに注意してください。また、「ID プロパティのマッピング」 で説明されたように @IdClass を使用することもできます。
@Entity
public class RegionalArticle implements Serializable {

    @Id
    public RegionalArticlePk getPk() { ... }
}

@Embeddable
public class RegionalArticlePk implements Serializable { ... }
または
@Entity public class RegionalArticle implements Serializable {

    @EmbeddedId
    public RegionalArticlePk getPk() { ... }
}

public class RegionalArticlePk implements Serializable { ... }
Hibernate 固有のアノテーション @AccessType が使用されない限り、@Embeddable は所有側エンティティのアクセスタイプを継承します。複合外部キー (デフォルトのセンシティブな値を使用しない場合) は、基本的に @JoinColumn のアレイである @JoinColumns エレメントを使用して関係に対して定義されます。referencedColumnNames を明示的に表現することは推奨される方法です。この方法に従わないと、Hibernate はユーザーがプライマリキー宣言と同じ順序のカラムを使用すると見なします。
@Entity
public class Parent implements Serializable {
    @Id
    public ParentPk id;
    public int age;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumns ({
        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
    })
    public Set<Child> children; //unidirectional
    ...
}
@Entity
public class Child implements Serializable {
    @Id @GeneratedValue
    public Integer id;

    @ManyToOne
    @JoinColumns ({
        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
    })
    public Parent parent; //unidirectional
}
@Embeddable
public class ParentPk implements Serializable {
    String firstName;
    String lastName;
    ...
}
referencedColumnName の明示的な使用に注意してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.