| この記事の要点 |
|---|
|
基本的な使い方
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_name", length = 100, nullable = false)
private String name;
@Column(unique = true)
private String email;
@Column(columnDefinition = "TEXT")
private String bio;
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
}
主要な属性
| 属性 | デフォルト | 用途 |
|---|---|---|
name | フィールド名 | カラム名指定 |
nullable | true | NULL 許可 |
length | 255 (String) | VARCHAR の長さ |
unique | false | UNIQUE 制約 |
precision | 0 | DECIMAL の桁数 |
scale | 0 | DECIMAL の小数桁数 |
columnDefinition | auto | カラム定義を直接指定 |
insertable | true | INSERT 時に含める |
updatable | true | UPDATE 時に含める |
table | 主テーブル | JOIN 先テーブル |
使用例
NOT NULL 制約 + UNIQUE
@Column(nullable = false, unique = true)
private String username;
// → username VARCHAR(255) NOT NULL UNIQUE
VARCHAR の長さ指定
@Column(length = 50)
private String code;
// → code VARCHAR(50)
TEXT 型(長文)
@Column(columnDefinition = "TEXT")
private String description;
// → description TEXT
// length 指定では不十分なときに使用
BigDecimal(金額・精度が重要な数値)
@Column(precision = 10, scale = 2)
private BigDecimal price;
// → price DECIMAL(10,2)
// 全 10 桁、うち小数 2 桁 → 最大 99999999.99
更新不可カラム(作成日時等)
@Column(name = "created_at", updatable = false)
@CreationTimestamp // Hibernate: INSERT 時に自動セット
private LocalDateTime createdAt;
@Column(name = "updated_at")
@UpdateTimestamp // Hibernate: UPDATE 時に自動更新
private LocalDateTime updatedAt;
列挙型(Enum)
public enum UserStatus { ACTIVE, INACTIVE, SUSPENDED }
@Enumerated(EnumType.STRING) // 文字列で保存(推奨)
@Column(length = 20)
private UserStatus status;
// EnumType.ORDINAL(インデックス番号で保存)は順序変更で破綻するので非推奨
計算カラム(DB 側で生成)
@Column(insertable = false, updatable = false)
private LocalDateTime serverTimestamp;
// → INSERT/UPDATE 時にこのフィールドは含まれない
// DB 側のデフォルト値 / トリガで設定
カラム命名規則(キャメル → スネーク)
Spring Boot + Hibernate のデフォルトでは、Java のキャメルケースを自動でスネークケースに変換します。
@Entity
public class User {
private String firstName; // → first_name カラム
private String lastName; // → last_name カラム
}
// 明示したい場合
@Column(name = "first_name")
private String firstName;
// 命名戦略の変更 (application.properties)
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# → そのまま (firstName → firstName カラム)
@Column と関連アノテーション
@Id(主キー)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // MySQL/PostgreSQL の AUTO_INCREMENT
@Column(name = "user_id")
private Long id;
// シーケンス (Oracle, PostgreSQL)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_seq")
@SequenceGenerator(name = "user_seq", sequenceName = "user_sequence", allocationSize = 1)
private Long id;
// UUID
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@JoinColumn(外部キー)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
// → user_id BIGINT NOT NULL REFERENCES users(id)
@Temporal(古い Date 型用)
// 古い java.util.Date 用 (LocalDate/LocalDateTime なら不要)
@Temporal(TemporalType.DATE)
@Column(name = "birth_date")
private Date birthDate;
@Lob(Large Object: BLOB / CLOB)
@Lob
@Column(columnDefinition = "LONGTEXT")
private String content;
@Lob
private byte[] image;
制約と Bean Validation の併用
JPA の @Column は DDL 生成のためのもの、Bean Validation は実行時バリデーションのためのもの。両方付けるのが定石:
@Column(nullable = false, length = 100)
@NotNull
@Size(max = 100)
private String name;
@Column(unique = true)
@Email
private String email;
DDL 自動生成と運用
Hibernate は @Column 情報から CREATE TABLE 文を生成できますが、本番運用では推奨されません:
# application.properties
spring.jpa.hibernate.ddl-auto=update # 開発:差分更新(非推奨:危険)
spring.jpa.hibernate.ddl-auto=create-drop # テスト:起動時生成、終了時削除
spring.jpa.hibernate.ddl-auto=validate # 本番:DB スキーマと一致するか検証のみ
spring.jpa.hibernate.ddl-auto=none # 本番推奨:DDL は手動 / Flyway / Liquibase 管理
本番では Flyway / Liquibase でマイグレーション管理を推奨。
関連記事
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38