Jakarta EE 10 の学習 - address book の理解4 Contact クラス -

記事
IT・テクノロジー
この記事では Contact.java ファイルの内容を理解する。このファイルでは Contact クラスを Entity クラスとして定義している。

Contact クラス

Contact クラスの定義内容は下記のような構成になっている。

// パッケージ宣言とインポート宣言
// Entity アノテーション
public class Contact implements Serializable {
// static メンバ変数宣言
// インスタンスメンバ変数宣言

// getter と setter メソッドの定義

// オーバーライドするメソッドの定義(hashCode, equals, toString)
}

Entity アノテーションはこのクラスを Entity クラスとして指定するために付加されている。
Serializable インターフェースの実装は必須という訳ではない。このアプリケーションでも特に必要ではないと思われる。
static メンバとして serialVersionUID が定義されているが、static 変数はインスタンス変数ではないのでデータベーステーブルの列としては使われない。
(シリアル化や serialVersionUID の意味についてはJava のテキストやドキュメント等を参照のこと)

Persistent フィールド

Entity クラスのインスタンスメンバ変数で、Persistent フィールドまたは Persistent プロパティとして指定された変数のみがデータベーステーブルの列とマップされる。
Persistent フィールドを指定するには、マッピングアノテーションをその変数宣言に付加するのが一つの方法となる。
Persistent プロパティを指定するにはメンバ変数の getter メソッド定義に付加する。

Contact クラスの定義では Persistent フィールドのみが指定されている。(xml ファイルで指定/上書き設定する方法もある)

Contact クラス定義で使用されているマッピングアノテーションは下記の3つとなる。
これらは "Jakarta Persistence 3.1" の仕様書 11章で定義が与えられている。
Id, GeneratedValue, Temporal 

Id アノテーションはプライマリキーとなる変数を指定している。 全ての Entity クラスには必ずプライマリキーが必要となる。
GenratedValue アノテーションは id の値が自動生成されることを指定している。
Temporal アノテーションは java.util.Date タイプのフィールドには付加する必要がある。

他にも "Jakarta Bean Validation 3.0" の仕様で定義されている下記のアノテーションが使用されている。これらの定義の確認にはこの仕様書を参照する必要がある。
これらはマッピングアノテーションではなく、入力フォームで適用される入力値に対する規則を与えるために使用されている。
NotNull, Past, Pattern

NotNull は氏名(firstName, lastName)の入力値が null であることを禁止している。String 型の場合は空文字列 "" は許可されるので、フォームフィールドが空欄でもデータ登録できる。
Past は生年月日(birthday)の入力が現在より過去の日付であることを要求している。
Pattern は正規表現を使って email と電話番号の可能な入力パターンを与えている。

インスタンスメンバ変数の内で、下記の変数にはマッピングアノテーションが付加されていない。
firstName, lastName, email, mobilePhone, homePhone

マッピングアノテーションが付加されていない場合には一定の条件の下で Basic アノテーションが付加されているのと同じ扱いを受ける。そのため、これらの変数も Persistent フィールドとして自動的に指定されている。
(条件について詳細は "Jakarta Persistence 3.1" の仕様書を参照)

オーバーライドしているメソッド

Contact クラスでは Object クラスの下記のメソッドをオーバーライドして定義している。
hashCode(), equals(), toString()

これらはこのアプリケーションでは特に使用されていないと思われる。


参考資料:
"Jakarta Persistence 3.1" の仕様書
"Jakarta Bean Validation 3.0" の仕様書

シリアル化や serialVersionUID の意味については例えば下記のページに記載がある。
URL:  docs.oracle.com/javase/8/docs/platform/serialization/spec/class.html
URL:  docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/Serializable.html

コメント: 記事内の情報は著者が個人的に調べた範囲で理解しているものです。必要に応じて訂正する場合があります。記事中に含まれるURL はプロトコルを含めると禁止ワードに引っ掛かるので省いています。

著者・投稿者: ENARTS05
編集履歴:
2023/11/2 作成
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す