ホームページ > Java > &#&チュートリアル > `@EmbeddedId` と `@IdClass` を使用して JPA と Hibernate で複合キーを効果的にマップする方法は?

`@EmbeddedId` と `@IdClass` を使用して JPA と Hibernate で複合キーを効果的にマップする方法は?

Susan Sarandon
リリース: 2024-12-11 11:20:11
オリジナル
281 人が閲覧しました

How to Effectively Map Composite Keys in JPA and Hibernate using `@EmbeddedId` and `@IdClass`?

JPA と Hibernate を使用した複合キーのマッピング

エンティティをデータベース テーブルにマッピングする場合、レコードを一意に識別するために主キーを使用するのが一般的です。複数の列で構成される複合キーは、従来のデータベース システムでよく使用されます。 JPA と Hibernate はどちらも、複合キーを効果的に処理するためのアノテーションを提供します。

EmbeddedId の使用

EmbeddedId アノテーションは、Java クラスが複合主キーを表すことを示します。クラスをテーブルのクラスター化された主キーにマップします。クラスは以下を行う必要があります:

  • @Embeddable アノテーションが付けられている
  • 主キー列に対応するパブリック プロパティまたは保護されたプロパティを定義している
  • すべての値を受け取るパブリック コンストラクターがある主キー列
  • 値のequals()メソッドとhashCode()メソッドを実装します。等価

EmbeddedId の例

@Entity
public class Time {
    @EmbeddedId
    private TimePK timePK;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

@Embeddable
public class TimePK {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}
ログイン後にコピー

IdClass の使用

IdClass アノテーションは、複数のフィールドまたはエンティティ クラスのプロパティは複合主キーを構成します。クラスは以下を行う必要があります:

  • シリアル化可能なオブジェクト (例: java.io.Serializable) を拡張する
  • 引数のない public コンストラクターを持つ
  • public (または protected を定義する) 、プロパティベースのアクセスの場合)主キーに対応するフィールドまたはプロパティcolumns
  • 値の等価性を実現するために、equals() メソッドと hashCode() メソッドを実装します

IdClass を使用した例

@Entity
@IdClass(TimePK.class)
public class Time {

    @Id
    private Integer levelStation;
    @Id
    private Integer confPathID;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

public class TimePK implements Serializable {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}
ログイン後にコピー

選択EmbeddedId とIdClass

EmbeddedId は複合キー用に別のクラスを作成しますが、IdClass はエンティティ クラス自体を使用して主キー フィールドを保持します。 EmbeddedId はより明示的で意味のあるエンティティを示唆しますが、IdClass は独立した意味を持たないフィールドの組み合わせに適しています。

References

  • JPA 1.0仕様: https://jcp.org/en/jsr/detail?id=220

    • セクション 2.1.4: https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_2.1.4
    • セクション9.1.14: https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9.1.14
    • セクション9.1.15: https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9.1.15

以上が`@EmbeddedId` と `@IdClass` を使用して JPA と Hibernate で複合キーを効果的にマップする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート