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入門」に戻る