Entityクラス
Entityクラスとは?
Entityクラスとはデータベースのテーブルに対応するクラスです。リレーショナル・データモデルにおける「エンティティ(実体)」を表現するクラスと考えることができます。
重要)JPAにおいて管理対象とするテーブルは、必ず対応するEntityクラスを作成しなければなりません。
Entityクラスの作成
クラスの宣言
Entityクラスは「@javax.persistence.Entity」アノテーションを付けたPOJO(JavaBeans)クラスとして作成する必要があります。また通常はjava.io.Serializableインターフェイスをimplementsします。
@Entity
public class ClassName implements Serializable {
// ...
}
クラス名がテーブル名と完全に同じ名前であれば、対応するテーブルと自動的にマッピングされますが、テーブル名とクラス名が異なる場合には「@javax.persistence.Table」アノテーションを使用してname属性にテーブル名を明示的に指定する必要があります。
@Entity
@Table(name="table_name")
public class ClassName implements Serializable {
// ...
}
フィールドの宣言
Entityクラスでは、テーブルの主キー列に対応するフィールドを宣言する必要があり、その主キー・フィールドに対して「@javax.persistence.Id」を指定しなければなりません。
主キー・フィールドの宣言において可能なデータ型は以下に示す型となります。
- プリミティブ・タイプおよびそのラッパー・クラス
- java.lang.String
- java.util.Dateおよびjava.sql.Date
- java.math.BigDecimal, java.math.BigInteger
- 単一の@javax.persistence.Id
- 複数の@javax.persistence.Idおよび単一の@javax.persistence.IdClass
- 単一の@javax.persistence.EmbeddedId
主キー列以外の列に関してはマッピングは任意となります。クラス名とテーブル名の規則と同様、フィールド名と列名が完全に同じ場合には自動的にマッピングされることになります(デフォルト・マッピング・ルール)。
例として本の著者を表すEntityクラス「Author」(Authorテーブルに対応)であれば以下のようになります。
@Entity
public class Author implements Serializable {
@Id
private Integer id;
private String name;
}
フィールド名と列名が異なる場合には自動的にマッピングされないため、マッピングするためにはフィールドに「@javax.persistence.Column」アノテーションを付け、name属性にテーブル名を指定する必要があります。例えばテーブルの列名が「author_name」で、Entityクラスのフィールド名を「name」にするためには以下のように記述する必要があります。
@Entity
public class Author implements Serializable {
@Id
private Integer id;
@Column(name="author_name")
private String name;
}
日付/時間型のマッピング
列挙型のマッピング
列挙型フィールドのマッピングには「@javax.persistence.Enumerated」アノテーションを使用します。