【JPA】 annotationメモ - IDの種類 | さすらいびとの徒然漂流記

さすらいびとの徒然漂流記

ふらふら漂流するさすらいびとのように,色々な話題についてお気楽極楽,徒然なるままに…

最近現場で使っていて,色々と細かい点をまとめておく意味で,これから何回かに分けて書いていこうかと思っているところ.

まず,第1回目はIDの種類.


JPAのIDには以下の3つの形式が用意されている.


  • @Id
  • @EmbeddedId
  • @IdClass

これらの違いについて簡単に説明をする.


@Id

単純な永続化IDかつ単純な属性の場合.

primitiveやStringDateなどのJavaの単純な属性とテーブルのPKをマップする.


@Entity

public class MyEntityA implements Serializable {

@Id

private String id;

//...

}


@EmbeddedId

複合永続化IDかつ単純な属性の場合.

通常のJavaクラスとして定義される型で定義されるJavaの属性とテーブルの複合キーをマップする.


@Embeddable

public class MyKey implements Serializable {

private String name;
private Long number;

}


@Entity

public class MyEntityB implements Serializable {

@EmbeddedId

private MyKey key;

//...

}


@IdClass

複合永続化IDかつ複数の属性の場合.

単純な複数のJavaの属性とテーブルの複合キーをマップする.

旧スタイルのEJB実装のmigration用に追加されたもの.


@Entity
@IdClass(MyKey.class)

public class MyEntityC implements Serializable {

@Id

private String name;
@Id

private Long number;

//...

}



今回はここまで.

次回はIdGeneratorを取り上げる予定.



P.S.

このブログはコード例が書きにくいから途中で萎えるかも…