JPA (Java Persistence API)のアノテーション

JPAにおいて、エンティティとテーブル間のマッピング定義のようなメタ情報はアノテーションを使用して定義する。

アノテーション

@Table及び@Columnについては省略可能であるが、利用するテーブル名及びカラム名を明示的に指定することで、利用するリソースを明確にし、ソースコードの可読性が向上する。

JPAのアノテーション一覧
アノテーション 役割
@Column エンティティの各フィールドにマッピングされる物理テーブルのカラム名を指定
@Entity エンティティクラスであることを指定
@GeneratedValue 主キーの値の生成戦略
@Id 主キーフィールドを宣言
@Table エンティティにマッピングされる物理テーブル名を指定

@javax.persistence.Column

永続プロパティまたはフィールド用のマップされた列を指定するために使用される。@Columnアノテーションが指定されていない場合は、デフォルト値が適用される。

@Column アノテーションには以下に示す任意要素を指定できる。

columnDefinition
列のDDLを生成するときに使用されるSQLの句を String 型で指定する。
insertable
永続化プロバイダによって生成されるSQLのINSERT文に列が含まれるかどうかを boolean 型で指定する。
length
列の長さを int 型で指定する。
name
列の名前を String 型で指定する。
@Entity
@Table(name="EMP")
public class Employee
{
  @Id
  @GeneratedValue
  @Column(name = "EMPNO")
  private Long employeeNo;
}
nullable
データベース列がNULL可能であるかどうかを boolean 型で指定する。
precision
decimal列の精度を int 型で指定する。
scale
decimal列のスケールを int 型で指定する。
table
列を含む表の名前を String 型で指定する。
unique
列がユニークキーであるかどうかを boolean 型で指定する。
updatable
永続化プロバイダによって生成されるSQLのUPDATE文に列が含まれるかどうかを boolean 型で指定する。

設定先

フィールドに@Column アノテーションを指定できる。

省略

エンティティのフィールド名とデータベースのカラム名が同一であれば、@Column アノテーションを省略できる。

@javax.persistence.Entity

クラスがエンティティであることを指定する。このアノテーションはエンティティクラスに適用される。

Entity アノテーションには以下に示す任意要素を指定できる。

name
エンティティ名を String 型で指定する。エンティティクラスの非修飾名がデフォルトである。この名前はクエリ内のエンティティを指すために使用される。名前はJava永続性問合せ言語の予約語であってはならない。

設定先

クラスに対して @Column アノテーションを指定できる。

省略

@Entity アノテーションは必須であり、省略できない。

@javax.persistence.GeneratedValue

主キー列にユニークな値を自動で生成、付与する方法を指定するアノテーション。@Idを持つ主キーのフィールド又はプロパティに適用する。

@GeneratedValue アノテーションには以下に示す任意要素を指定できる。

generator
@SequenceGenerator 又は @TableGenerator アノテーションで使用する主キージェネレータの名前を String 型で指定する。
javax.persistence.GenerationType strategy
主キー生成ストラテジ

javax.persistence.GenerationType

ENUM定数

GenerationTypeの定数
定数 説明
AUTO データベースごとに最も適切な手順を選択して、主キー値を生成する。データベースがOracleの場合は、GenerationType.TABLEと同じ処理をする。
IDENTITY データベースのID列を使用して主キー値を生成する。データベースがOracleの場合は、GenerationType.SEQUENCEと同じ処理をする。
SEQUENCE データベースのシーケンスオブジェクトを使用して主キー値を生成する。
TABLE 主キー値を保持しておくためのテーブルを使用して、主キー値を生成する。

設定先

フィールドに対して @GeneratedValue アノテーションを指定できる。

@javax.persistence.Id

エンティティの主キーを指定する。@Idアノテーションが適用されるフィールド又はプロパティは、次のいずれかのタイプでなければならない。

エンティティの主キーのマッピングされた列は、主テーブルの主キーであるとみなされる。@Columnアノテーションが指定されていない場合、主キーの列名が主キープロパティ又はフィールドの名前とみなされる。

設定先

フィールドに対して @Id アノテーションを指定できる。

省略

@Id アノテーションは必須であり、省略できない。

@javax.persistence.Table

アノテーション付きエンティティの主テーブルを指定する。追加のテーブルを@SecondaryTable又は@SecondaryTablesアノテーションを使用して指定することもできる。エンティティクラスに@Tableアノテーションが指定されない場合はデフォルト値が適用される。

@Table アノテーションには以下に示す任意要素を指定できる。

catalog
テーブルのカタログを String 型で指定する。
name
テーブルの名前を String 型で指定する。
@Entity
@Table(name="EMP", schema="TSUKA")
public class Employee {
  @Id
  @GeneratedValue
  @Column(name = "EMPNO")
  private Long employeeNo;
}
schema
テーブルのスキーマを String 型で指定する。
@Entity
@Table(name="EMP", schema="TSUKA")
public class Employee {
  @Id
  @GeneratedValue
  @Column(name = "EMPNO")
  private Long employeeNo;
}
UniqueConstraint
テーブルに配置される固有の制約を javax.persistence.UniqueConstraint 型の配列で指定する。
@Entity
@Table(
  name="EMP", 
  uniqueConstraints=@UniqueConstraint(columnNames={"EMPNO", "ENAME"})
)
public class Employee {
  @Id
  @GeneratedValue
  @Column(name = "EMPNO")
  private Long employeeNo;

  @Column(name = "ENAME")
  private String employeeName;
}

設定先

クラスに対して @Table アノテーションを指定できる。

省略

エンティティのクラス名とデータベースのテーブル名が同一であれば、@Table アノテーションを省略できる。

@Entity
@Table(schema="TSUKA")
public class Emp {
  @Id
  @GeneratedValue
  @Column(name = "EMPNO")
  private Long employeeNo;
}