ホームページ > Java > &#&チュートリアル > `EmbeddedId` と `IdClass` を使用して Hibernate で JPA で複合キーをマッピングする方法

`EmbeddedId` と `IdClass` を使用して Hibernate で JPA で複合キーをマッピングする方法

Patricia Arquette
リリース: 2024-12-03 09:32:14
オリジナル
491 人が閲覧しました

How to Map Composite Keys in JPA with Hibernate Using `EmbeddedId` and `IdClass`?

Hibernate を使用した JPA の複合キー

リレーショナル データベースを使用する場合、オブジェクトの Java クラスに複合キーをマップする必要がある場合があります。指向性のあるプログラミング。指定されたコードでは、Time テーブルに levelStation と confPathID で構成される複合キーがあります。この記事では、JPA と Hibernate を使用して、EmbeddedId アノテーションと IdClass アノテーションの両方を使用してこの複合キーをマッピングする方法について説明します。

IdClass

IdClass アノテーションは、複数のアノテーションをマッピングするために使用されます。個々のフィールドを単一の複合主キー (PK) に変換します。このメソッドを実装するには、複合 PK 構造を定義する静的内部クラスを作成し、値を適切に比較するためにそのquals() メソッドと hashCode() メソッドを実装します。この静的クラス内の対応するフィールドをエンティティ内のフィールドと識別します。

public class TimePK implements Serializable {
    protected Integer levelStation;
    protected Integer confPathID;
    // ...
}

@Entity
@IdClass(TimePK.class)
public class Time {
    @Id private Integer levelStation;
    @Id private Integer confPathID;
    // ...
}
ログイン後にコピー

EmbeddedId

EmbeddedId アノテーションを使用すると、複合 PK を埋め込み可能としてカプセル化できます。エンティティ内のクラス。埋め込み可能クラス内で、複合 PK とそのアクセサーを構成するフィールドを定義します。

@Embeddable
public class TimePK {
    protected Integer levelStation;
    protected Integer confPathID;
    // ...
}

@Entity
public class Time {
    @EmbeddedId private TimePK timePK;
    // ...
}
ログイン後にコピー

相違点

IdClass アノテーションと EmbeddedId アノテーションの両方を使用して複合キーをマップできます。 、しかし、それらは少し異なります目的:

  • EmbeddedId は、複合 PK がそれ自体内のエンティティとして意味論的な意味を持っているか、または潜在的に再利用可能であることを強調します。一方、
  • IdClass は、特定の組み合わせを指定することに重点を置いています。フィールドの数は、特定の内容を示唆することなく、エンティティを一意に識別します意味。

複合キーを使用したクエリ

使用されるアノテーションに応じて、複合に基づいてクエリを実行する場合は若干異なる構文が必要ですキー:

IdClass

select t.levelStation from Time t
ログイン後にコピー

EmbeddedI d

select t.timePK.levelStation from Time t
ログイン後にコピー

参考文献

  • [JPA 1.0 仕様](https://docs.oracle.com/javaee/7/api/javax/persistence/package-summary.html)

    • セクション 2.1.4「主キーとエンティティ ID」
    • セクション 9.1.14「EmbeddedId」アノテーション"
    • セクション 9.1.15「IdClass アノテーション」

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

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