JPAにおいて、エンティティとテーブル間のマッピング定義のようなメタ情報はアノテーションを使用して定義する。
@Table及び@Columnについては省略可能であるが、利用するテーブル名及びカラム名を明示的に指定することで、利用するリソースを明確にし、ソースコードの可読性が向上する。
アノテーション | 設定先 | 役割 | 必須 |
---|---|---|---|
@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;
永続プロパティまたはフィールド用のマップされた列を指定するために使用される。@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文に列が含まれるかどうか |
クラスがエンティティであることを指定する。このアノテーションはエンティティクラスに適用される。
要素 | 説明 |
---|---|
String name | エンティティ名。エンティティクラスの非修飾名がデフォルトである。この名前はクエリ内のエンティティを指すために使用される。名前はJava永続性問合せ言語の予約語であってはならない。 |
主キー列にユニークな値を自動で生成、付与する方法を指定するアノテーション。@Idを持つ主キーのフィールド又はプロパティに適用する。
要素 | 説明 |
---|---|
String generator | @SequenceGenerator又は@TableGeneratorアノテーションで使用する主キージェネレータの名前 |
javax.persistence.GenerationType strategy | 主キー生成ストラテジ |
ENUM定数
定数 | 説明 |
---|---|
AUTO | データベースごとに最も適切な手順を選択して、主キー値を生成する。データベースがOracleの場合は、GenerationType.TABLEと同じ処理をする。 |
IDENTITY | データベースのID列を使用して主キー値を生成する。データベースがOracleの場合は、GenerationType.SEQUENCEと同じ処理をする。 |
SEQUENCE | データベースのシーケンスオブジェクトを使用して主キー値を生成する。 |
TABLE | 主キー値を保持しておくためのテーブルを使用して、主キー値を生成する。 |
エンティティの主キーを指定する。@Idアノテーションが適用されるフィールド又はプロパティは、次のいずれかのタイプでなければならない。
エンティティの主キーのマッピングされた列は、主テーブルの主キーであるとみなされる。@Columnアノテーションが指定されていない場合、主キーの列名が主キープロパティ又はフィールドの名前とみなされる。
アノテーション付きエンティティの主テーブルを指定する。追加のテーブルを@SecondaryTable又は@SecondaryTablesアノテーションを使用して指定することもできる。エンティティクラスに@Tableアノテーションが指定されない場合はデフォルト値が適用される。
要素 | 説明 |
---|---|
String catalog | テーブルのカタログ |
String name | テーブル名 |
String | テーブルのスキーマ |
UniqueConstraint | uniqueConstraintsテーブルにある一意制約 |