Entityクラス
・テーブル1件分を表すクラスを作成します。
データ設計(テーブル定義)
| 論理名 | 物理名 | 型 | 制約 |
|---|---|---|---|
| ID | id | 連番 | 主キー |
| 目撃日 | sighted_date | DATE | NOT NULL |
| 目撃時刻 | sighted_time | TIME | NOT NULL |
| 回数 | count | INTEGER | NOT NULL |
| メモ | memo | VARCHAR(255) | |
| 作成日時 | created_at | TIMESTAMP | |
| 更新日時 | updated_at | TIMESTAMP |
*TIMESTAMPは入力された日時をそのまま保存する。(タイムゾーンを保持しない)
TIMESTAMPTZはタイムゾーンを考慮して保存されるため、複数地域から利用するシステムでは一般的にこちらが使用される。
本アプリは単一地域での利用を前提とするため、TIMESTAMPを採用した。
*countをintではなくIntegerにするのは、nullを表現するため。
intはプリミティブ型なのでnullの表現ができず、「0回」と「未入力」の区別ができなくなる。
package com.example.demo.entity;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;
/**
* アライグマ目撃記録1件を表すクラス。raccoonテーブルに対応する。
*/
@Entity
@Data
@Table(name = "raccoon")
public class Raccoon {
public Raccoon() {}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private LocalDate sightedDate;
private LocalTime sightedTime;
private Integer count;
private String memo;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
アノテーション@
@Entity
・JPAの管理対象であることを示す。テーブル名省略時はクラス名が使用される。
@Table
・クラスと対応づけるテーブル名を明示的に指定する。
@Data
・ToString, Getter, Setter, RequiredArgsConstructor, EqualsAndHashCode全てのアノテーションを設定したのと同じ。
@Id
・Entityの主キーを指定する。
@GeneratedValue(strategy = GenerationType.IDENTITY)
・自動採番(自動で番号を振ること)