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 アノテーションの両方を使用して複合キーをマップできます。 、しかし、それらは少し異なります目的:
複合キーを使用したクエリ
使用されるアノテーションに応じて、複合に基づいてクエリを実行する場合は若干異なる構文が必要ですキー:
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)
以上が`EmbeddedId` と `IdClass` を使用して Hibernate で JPA で複合キーをマッピングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。