web-dev-qa-db-ja.com

SQL JPA-主キーとしての複数の列

複数の列でIDを構成する場合。

SQLの例:

CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])

Jpa Entityクラスでこれを行うにはどうすればよいですか? columndefinitionを通じて?

idフィールドを次のように設定するだけです。

value = Column1 + Column2 + Column3 // aint working.
14
Anders Pedersen

複合キーのクラスが必要です。

public class CompositeKey implements Serializable {
    private int column1;
    private int column2;
    private int column3;
}

そして、エンティティクラスで@IdClassアノテーションを使用します。

@Entity
@IdClass(CompositeKey.class)
public class EntityExample {
    @Id
    private int column1;
    @Id
    private int column2;
    @Id
    private int column3;
    ...
    ...
}

これでうまくいくと思う。それが役に立てば幸いです!

ええ、他の解決策があります。@ jkleeが言及したものがありますが、どちらも機能します。それは好みの問題です。

31
Raul Cuth

つかいます @Embeddableおよび@EmbeddedId

例:

@Entity
public class Project {
    @EmbeddedId ProjectId id;
     :
}

@Embeddable
Class ProjectId {
    int departmentId;
    long projectId;
}

詳細はこちら http://www.objectdb.com/Java/jpa/entity/id#Embedded_Primary_Key_

11
jklee

クラス内のすべてのフィールドが主キーの一部である場合、ソリューションは非常に簡単です(@ raul-cuthが提供する拡張ソリューション)。

@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {

    @Id
    private int column1;

    @Id
    private int column2;

    @Id
    private int column3;
}
6
heroin
  1. @IdClassクラスで@Entityアノテーションを使用し、続いて複合主キーの一部である個々のフィールドで@Idアノテーションを使用します。
  2. あるいは、複合主キーの個々のフィールドで構成できる@Embeddableクラスを使用し、このクラスの参照を@Embeddedクラスの@Entityアノテーションで属性として使用できます。お役に立てれば。
2
Penguin