本文へスキップ
BecomeCoder

Spring / Spring Bootコース · 第5章 データアクセス ― Spring Data JPA · レッスン17

Spring Data JPAとは ― @Entity

ローカル実施

導入

データベースのテーブルは行と列の表ですが、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が自動的に行ってくれます。開発者はSQLSELECTINSERT を直接書かなくても、User オブジェクトを操作するだけでデータベースを扱えるようになります。

アノテーション意味
@Entityこのクラスがテーブルに対応することを示す
@Table対応するテーブル名を指定(省略可)
@Id主キーとなるフィールド
@GeneratedValue主キーの採番方法(DB任せ、連番など)
@Columnカラムの詳細設定(名前、NULL許可、一意性など)

やってみよう

「商品(Product)」テーブルが id, name, price, stock(在庫数)というカラムを持つとして、@Entity クラスをどう書けばよいか、上の例を参考に自分で書き出してみましょう。