ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
基本的な使い方
@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=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?