7

JPA で @Id アノテーションを使用して、そのクラスの主キーを割り当てることができます。私の質問は、テーブルに自動生成されたキーを持たず、フィールド (おそらく複数) を主キーとして使用したくない場合です。

SSN、NATIONALITY、および NAME を含む person テーブルがあるとします。SSN は、その国で個人を識別する番号として定義されています。したがって、2 つの異なる国に同じ​​番号を持つ 2 人の人物がいる可能性があります。このテーブルの主キーは、SSN+NATIONALITY にすることができます。JPA を使用してこれら 2 つのフィールドをマップし、それをオブジェクトにマップする方法はありますか? または、自動生成された ID を作成して @Id アノテーションを使用する唯一の方法

CREATE TABLE PERSON (
     SSN   INT,
     NATIONALITY VARCHAR,
     NAME VARCHAR
  )
4

1 に答える 1

11

はい、可能です。複合主キーは、複数の主キー フィールドで構成されます。各主キー フィールドは、JPA でサポートされている型のいずれかである必要があります。テーブルには、次のものがあります。

@Entity @IdClass(PersonId.class)
public class Person {
    @Id int ssn;
    @Id String nationality;
     ....
}

複数のキーを持つエンティティの場合、JPA は特別な ID クラスを定義する必要があります。このクラスは、@IdClass アノテーションを使用してエンティティ クラスにアタッチする必要があります。

class PersonId {
    int ssn;
    String nationality;
}

ID クラスは主キー フィールドを反映し、そのオブジェクトは主キー値を表すことができます

于 2013-06-05T18:34:36.883 に答える