LoginSignup
12
10

More than 5 years have passed since last update.

JPAの基礎2

Last updated at Posted at 2016-12-28

Entityクラス

Entityクラスとは?

Entityクラスとはデータベースのテーブルに対応するクラスです。リレーショナル・データモデルにおける「エンティティ(実体)」を表現するクラスと考えることができます。

重要)JPAにおいて管理対象とするテーブルは、必ず対応するEntityクラスを作成しなければなりません。

Entityクラスの作成

クラスの宣言

Entityクラスは「@javax.persistence.Entity」アノテーションを付けたPOJO(JavaBeans)クラスとして作成する必要があります。また通常はjava.io.Serializableインターフェイスをimplementsします。

クラス名とテーブル名が同じ場合のEntityクラスの宣言
@Entity
public class ClassName implements Serializable {
    // ...
}

クラス名がテーブル名と完全に同じ名前であれば、対応するテーブルと自動的にマッピングされますが、テーブル名とクラス名が異なる場合には「@javax.persistence.Table」アノテーションを使用してname属性にテーブル名を明示的に指定する必要があります。

クラス名とテーブル名が異なる場合のEntityクラスの宣言
@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テーブルに対応)であれば以下のようになります。

Author.java
@Entity
public class Author implements Serializable {

    @Id
    private Integer id;

    private String name;
}

フィールド名と列名が異なる場合には自動的にマッピングされないため、マッピングするためにはフィールドに「@javax.persistence.Column」アノテーションを付け、name属性にテーブル名を指定する必要があります。例えばテーブルの列名が「author_name」で、Entityクラスのフィールド名を「name」にするためには以下のように記述する必要があります。

Author.java
@Entity
public class Author implements Serializable {

    @Id
    private Integer id;

    @Column(name="author_name")
    private String name;
}

Columnアノテーション

日付/時間型のマッピング
列挙型のマッピング

列挙型フィールドのマッピングには「@javax.persistence.Enumerated」アノテーションを使用します。

主キーの自動生成
12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10