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

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

DDD
リリース: 2024-12-11 04:55:10
オリジナル
212 人が閲覧しました

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

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

提供された SQL スキーマでは、Time テーブルには levelStation と confPathID で構成される複合主キーがあります。フィールド。 JPA および Hibernate でこのタイプのキーをマッピングするには、複合主キーを表す特別なアノテーションが必要です。

IdClass アノテーションの使用

1 つのオプションは、次の Java クラスを定義することです。 @IdClass アノテーションを使用した複合キー。クラスには、主キー列に対応するフィールド、ゲッター、セッター、equals、および hashCode メソッドが必要です:

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

    // Getters, setters, equals, hashCode
}
ログイン後にコピー

エンティティ クラスには @IdClass と複合キー オブジェクトの注釈が付けられます:

@Entity
@IdClass(TimePK.class)
class Time implements Serializable {
    @Id
    private Integer levelStation;
    @Id
    private Integer confPathID;

    // Other properties
}
ログイン後にコピー

EmbeddedId の使用アノテーション

または、@EmbeddedId アノテーションを使用して複合キーを含むクラスを定義できます。

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

    // Getters, setters, equals, hashCode
}
ログイン後にコピー

エンティティ クラスには @EmbeddedId と埋め込まれた複合キーでアノテーションが付けられます。キーオブジェクト:

@Entity
class Time implements Serializable {
    @EmbeddedId
    private TimePK timePK;

    // Other properties
}
ログイン後にコピー

IdClass の違いおよび EmbeddedId

@IdClass と @EmbeddedId の両方で、複合主キーのマッピングが可能です。ただし、いくつかの小さな違いがあります。

  • @IdClass は、フィールドの一意の組み合わせが主キーを形成することを指定しますが、それらには明確な意味はありません。
  • @EmbeddedId は、次のことを示唆しています。複合キーはそれ自体で意味のあるエンティティです。

@IdClass と @EmbeddedId のどちらを選択するかは依存します。アプリケーションの特定のセマンティクスについて。

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

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