複数の列でIDを構成する場合。
SQLの例:
CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])
Jpa Entityクラスでこれを行うにはどうすればよいですか? columndefinitionを通じて?
idフィールドを次のように設定するだけです。
value = Column1 + Column2 + Column3 // aint working.
複合キーのクラスが必要です。
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が言及したものがありますが、どちらも機能します。それは好みの問題です。
つかいます @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_
クラス内のすべてのフィールドが主キーの一部である場合、ソリューションは非常に簡単です(@ raul-cuthが提供する拡張ソリューション)。
@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
}
@IdClass
クラスで@Entity
アノテーションを使用し、続いて複合主キーの一部である個々のフィールドで@Id
アノテーションを使用します。@Embeddable
クラスを使用し、このクラスの参照を@Embedded
クラスの@Entity
アノテーションで属性として使用できます。お役に立てれば。