導入
データベースのテーブルは行と列の表ですが、Javaのプログラムはオブジェクトで動きます。この「表とオブジェクトの間の溝」を埋める作業を、毎回手で書くのは骨が折れます。
説明
「テーブルの行」と「Javaのオブジェクト」を対応づける技術を ORM(Object-Relational Mapping) と呼びます。Spring Data JPAは、Java標準のORM仕様である JPA(Jakarta Persistence API) と、その実装である Hibernate を土台にしています。
テーブルに対応するクラスには @Entity を付けます。
@Entity
@Table(name = "users") // テーブル名を明示(省略時はクラス名から推測される)
public class User {
@Id // 主キーであることを示す
@GeneratedValue(strategy = GenerationType.IDENTITY) // DB側の自動採番に任せる
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Column(unique = true)
private String email;
// コンストラクタ・getter/setterは省略
}
classDiagram
class User {
Long id
String name
String email
}
note for User "@Entity が付いたクラス"
このクラス1つを書くだけで、対応する users テーブルとの間で行↔オブジェクトの変換をHibernateが自動的に行ってくれます。開発者はSQLの SELECT や INSERT を直接書かなくても、User オブジェクトを操作するだけでデータベースを扱えるようになります。
| アノテーション | 意味 |
|---|---|
@Entity | このクラスがテーブルに対応することを示す |
@Table | 対応するテーブル名を指定(省略可) |
@Id | 主キーとなるフィールド |
@GeneratedValue | 主キーの採番方法(DB任せ、連番など) |
@Column | カラムの詳細設定(名前、NULL許可、一意性など) |
やってみよう
「商品(Product)」テーブルが id, name, price, stock(在庫数)というカラムを持つとして、@Entity クラスをどう書けばよいか、上の例を参考に自分で書き出してみましょう。