ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- 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アノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?