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

アノテーション

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

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

1 エンティティのクラス名とデータベースのテーブル名が同一であれば省略可能
2 エンティティのフィールド名とデータベースのカラム名が同一であれば省略可能

JPAにおけるアノテーションの使用例を示す。

@Entity
@Table(name = "EMPLOYEE")
public class Employee
{
    @Id
    @GeneratedValue
    @Column(name = "EMPNO")
    private Long empno;

javax.persistence.Column

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

@Columnアノテーションの任意要素
要素 説明
String columnDefinition 列のDDLを生成するときに使用されるSQLの句
boolean insertable 永続化プロバイダによって生成されるSQLのINSERT文に列が含まれるかどうか
int length 列の長さ
String name 列の名前
boolean nullable データベース列がNULL可能であるかどうか
int precision decimal列の精度
int scale decimal列のスケール
String table 列を含む表の名前
boolean unique 列がユニークキーであるかどうか
boolean updatable 永続化プロバイダによって生成されるSQLのUPDATE文に列が含まれるかどうか

javax.persistence.Entity

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

@Entityアノテーションの任意要素
要素 説明
String name エンティティ名。エンティティクラスの非修飾名がデフォルトである。この名前はクエリ内のエンティティを指すために使用される。名前はJava永続性問合せ言語の予約語であってはならない。

javax.persistence.GeneratedValue

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

@GeneratedValueアノテーションの任意要素
要素 説明
String generator @SequenceGenerator又は@TableGeneratorアノテーションで使用する主キージェネレータの名前
javax.persistence.GenerationType strategy 主キー生成ストラテジ

javax.persistence.GenerationType

ENUM定数

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

javax.persistence.Id

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

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

javax.persistence.Table

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

@Tableアノテーションの任意要素
要素 説明
String catalog テーブルのカタログ
String name テーブル名
String テーブルのスキーマ
UniqueConstraint uniqueConstraintsテーブルにある一意制約