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

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

Linda Hamilton
リリース: 2024-12-05 03:24:17
オリジナル
523 人が閲覧しました

How to Map Composite Keys in JPA and Hibernate using @EmbeddedId vs. @IdClass?

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

提供されたコードでは、コンポーネントとして levelStation と confPathID を使用して、Time テーブルに対して複合キーが定義されています。 JPA と Hibernate でこの複合キーをマップするには、@EmbeddedId と @IdClass の 2 つのオプションがあります。

@IdClass の使用

@IdClass アノテーションを使用すると、エンティティの複数のフィールドを複合主キーを形成します。これには、主キーを表すクラスを定義する必要があります。この場合、TimePK クラスは次のように定義できます。

@IdClass(TimePK.class)
public class Time implements Serializable {
    // ...
}
ログイン後にコピー

ここで、TimePK は、引数なしのコンストラクター、主キー フィールドのゲッター/セッター、および equals( を定義する必要がある別のクラスです。 ) および hashCode() メソッド。

@EmbeddedId の使用

@EmbeddedIdアノテーションは、埋め込みクラスをエンティティの主キーにマップします。 @IdClass とは対照的に、このアプローチはエンティティ クラスと主キー クラスを組み合わせます。 @EmbeddedId の使用方法は次のとおりです。

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

この場合、TimePK は Time エンティティの内部クラスであり、引数なしのコンストラクター、キー フィールドのゲッター/セッター、および等しいものも定義する必要があります。 () メソッドと hashCode() メソッド。

@IdClass と hashCode() の違い@EmbeddedId

@IdClass と @EmbeddedId の主な違いは、クエリ構文への影響です。 @IdClass を使用すると、エンティティを介して主キー フィールドに直接アクセスできますが、@EmbeddedId を使用すると、埋め込みクラスのゲッターを介してそれにアクセスします。

この 2 つのどちらかを選択する場合、@EmbeddedId は事実を伝えます。主キーはドメイン モデル内で意味のある ID を持っていることを示しますが、 @IdClass は主キーが単にフィールドを一意に識別するフィールドの組み合わせであることを示唆しています。 entity.

参照

  • JPA 1.0 仕様:

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

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

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