JPAにおいて、エンティティとテーブル間のマッピング定義のようなメタ情報はアノテーションを使用して定義する。
@Table及び@Columnについては省略可能であるが、利用するテーブル名及びカラム名を明示的に指定することで、利用するリソースを明確にし、ソースコードの可読性が向上する。
アノテーション | 役割 |
---|---|
@Column | エンティティの各フィールドにマッピングされる物理テーブルのカラム名を指定 |
@Entity | エンティティクラスであることを指定 |
@GeneratedValue | 主キーの値の生成戦略 |
@Id | 主キーフィールドを宣言 |
@Table | エンティティにマッピングされる物理テーブル名を指定 |
永続プロパティまたはフィールド用のマップされた列を指定するために使用される。@Columnアノテーションが指定されていない場合は、デフォルト値が適用される。
@Column アノテーションには以下に示す任意要素を指定できる。
@Entity
@Table(name="EMP")
public class Employee
{
@Id
@GeneratedValue
@Column(name = "EMPNO")
private Long employeeNo;
}
フィールドに@Column アノテーションを指定できる。
エンティティのフィールド名とデータベースのカラム名が同一であれば、@Column アノテーションを省略できる。
クラスがエンティティであることを指定する。このアノテーションはエンティティクラスに適用される。
Entity アノテーションには以下に示す任意要素を指定できる。
クラスに対して @Column アノテーションを指定できる。
@Entity アノテーションは必須であり、省略できない。
主キー列にユニークな値を自動で生成、付与する方法を指定するアノテーション。@Idを持つ主キーのフィールド又はプロパティに適用する。
@GeneratedValue アノテーションには以下に示す任意要素を指定できる。
ENUM定数
定数 | 説明 |
---|---|
AUTO | データベースごとに最も適切な手順を選択して、主キー値を生成する。データベースがOracleの場合は、GenerationType.TABLEと同じ処理をする。 |
IDENTITY | データベースのID列を使用して主キー値を生成する。データベースがOracleの場合は、GenerationType.SEQUENCEと同じ処理をする。 |
SEQUENCE | データベースのシーケンスオブジェクトを使用して主キー値を生成する。 |
TABLE | 主キー値を保持しておくためのテーブルを使用して、主キー値を生成する。 |
フィールドに対して @GeneratedValue アノテーションを指定できる。
エンティティの主キーを指定する。@Idアノテーションが適用されるフィールド又はプロパティは、次のいずれかのタイプでなければならない。
エンティティの主キーのマッピングされた列は、主テーブルの主キーであるとみなされる。@Columnアノテーションが指定されていない場合、主キーの列名が主キープロパティ又はフィールドの名前とみなされる。
フィールドに対して @Id アノテーションを指定できる。
@Id アノテーションは必須であり、省略できない。
アノテーション付きエンティティの主テーブルを指定する。追加のテーブルを@SecondaryTable又は@SecondaryTablesアノテーションを使用して指定することもできる。エンティティクラスに@Tableアノテーションが指定されない場合はデフォルト値が適用される。
@Table アノテーションには以下に示す任意要素を指定できる。
@Entity
@Table(name="EMP", schema="TSUKA")
public class Employee {
@Id
@GeneratedValue
@Column(name = "EMPNO")
private Long employeeNo;
}
@Entity
@Table(name="EMP", schema="TSUKA")
public class Employee {
@Id
@GeneratedValue
@Column(name = "EMPNO")
private Long employeeNo;
}
@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;
}