JPAの基本を覚える (3/7)
作成:2017-10-28 09:10
更新:2017-10-28 09:10
更新:2017-10-28 09:10
■エンティティクラスの作成
続いて、エンティティクラスを作成しましょう。エンティティクラスは、Javaの普通のクラスとして作成します。
Javaのソースコードファイルは、Mavenの場合、「main」フォルダの中に「java」フォルダを用意して、その中にまとめます。サンプルのプロジェクトでは「java」フォルダは用意されていないと思うので「main」フォルダの中にフォルダを用意して下さい。
この「java」フォルダの中に、パッケージの階層に合わせてフォルダを用意していきます。ここでは、com.tuyano.libroパッケージにクラスを用意しようと思うので、「java」フォルダ内に「com」、その中に「tuyano」、更にその中に「libro」とフォルダを作っていって下さい。そして、「libro」フォルダの中に、「MyDataEntity.java」というファイル名でソースコードファイルを作成します。
では、作成するエンティティクラスのソースコードを下のリスト欄に掲載しておきましょう。エンティティクラスは、だいたい以下のような形で作成します。見ればわかるように、実はごく普通のpure Javaなクラスなのです。
@Entity
これは、このクラスがエンティティクラスであることを示すアノテーションです。エンティティクラスには必ずこのアノテーションを用意します。
@Id
これは、プライマリキーの値を保管するフィールドにつけておくアノテーションです。これにより、このフィールドがプライマリキーの値を保管することがわかります。
@GeneratedValue
これは、このフィールドの値が自動生成されることを示すアノテーションです。これを指定することで、インスタンス作成時にこのフィールドの値を省略することができます。
・フィールド
エンティティクラスには、いくつものフィールドが用意されます。これは、テーブルに用意される項目に対応するものです。エンティティクラスは、レコードの値を保管するのに用いられます。つまり、テーブルにある値を保管するためのフィールドが必要なのです。
今回、MyDataEntityクラスでは、「id」「name」「mail」「tel」「created」といったフィールドが用意されていますね。これらの項目を持ったテーブルを作成し利用するものであることがわかります。
・アクセサ
レコードの値を保管するフィールドには、アクセサ(Setter/Getter)メソッドを用意します。これは、値の読み書きのために必要です。フィールドはすべてprivateですから、値を利用するためにはアクセサメソッドが必要です。
これは、SetterとGetterの両方を用意しないといけないわけではありません。例えばMyDataEntityでは、idとcreatedでは、Getterメソッドしか用意されていません。これらは、値の取得のみで変更はできないようにするためです。IDが外部から変更できたりしたら問題ですからね。
Javaのソースコードファイルは、Mavenの場合、「main」フォルダの中に「java」フォルダを用意して、その中にまとめます。サンプルのプロジェクトでは「java」フォルダは用意されていないと思うので「main」フォルダの中にフォルダを用意して下さい。
この「java」フォルダの中に、パッケージの階層に合わせてフォルダを用意していきます。ここでは、com.tuyano.libroパッケージにクラスを用意しようと思うので、「java」フォルダ内に「com」、その中に「tuyano」、更にその中に「libro」とフォルダを作っていって下さい。そして、「libro」フォルダの中に、「MyDataEntity.java」というファイル名でソースコードファイルを作成します。
では、作成するエンティティクラスのソースコードを下のリスト欄に掲載しておきましょう。エンティティクラスは、だいたい以下のような形で作成します。見ればわかるように、実はごく普通のpure Javaなクラスなのです。
@Entity
public class クラス名 {
@Id
private Integer プライマリキーのフィールド;
……以後、テーブルの項目をフィールドとして用意……
public Integer getId(){
return プライマリキーフィールド;
}
……以後、フィールドのアクセサメソッドを用意……
}
@Entity
これは、このクラスがエンティティクラスであることを示すアノテーションです。エンティティクラスには必ずこのアノテーションを用意します。
@Id
これは、プライマリキーの値を保管するフィールドにつけておくアノテーションです。これにより、このフィールドがプライマリキーの値を保管することがわかります。
@GeneratedValue
これは、このフィールドの値が自動生成されることを示すアノテーションです。これを指定することで、インスタンス作成時にこのフィールドの値を省略することができます。
・フィールド
エンティティクラスには、いくつものフィールドが用意されます。これは、テーブルに用意される項目に対応するものです。エンティティクラスは、レコードの値を保管するのに用いられます。つまり、テーブルにある値を保管するためのフィールドが必要なのです。
今回、MyDataEntityクラスでは、「id」「name」「mail」「tel」「created」といったフィールドが用意されていますね。これらの項目を持ったテーブルを作成し利用するものであることがわかります。
・アクセサ
レコードの値を保管するフィールドには、アクセサ(Setter/Getter)メソッドを用意します。これは、値の読み書きのために必要です。フィールドはすべてprivateですから、値を利用するためにはアクセサメソッドが必要です。
これは、SetterとGetterの両方を用意しないといけないわけではありません。例えばMyDataEntityでは、idとcreatedでは、Getterメソッドしか用意されていません。これらは、値の取得のみで変更はできないようにするためです。IDが外部から変更できたりしたら問題ですからね。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package com.tuyano.libro; import java.util.Date; import java.util.Calendar; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class MyDataEntity { @Id @GeneratedValue private Integer id; private String name; private String mail; private String tel; private Date created = Calendar.getInstance().getTime(); public MyDataEntity(){ super(); } public MyDataEntity(String name, String mail, String tel){ super(); this.name = name; this.mail = mail; this.tel = tel; } public Integer getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public Date getCreated() { return created; } @Override public String toString() { return "{\n\tid: " + id + ",\n\tname: " + name + ",\n\tmail: " + mail + ",\n\ttel:" + tel + ",\n\tdate: " + created + "\n}"; } }
※関連コンテンツ
「初心者のためのJava Persistence API入門」に戻る