0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Boot で User エンティティを作ったらテーブルができなくて原因を探した話

0
Last updated at Posted at 2026-06-07

はじめに

Spring Boot で User エンティティを作って起動したのに、データベースにテーブルができていなくて、静かにやられました😅
エラーで止まらないぶん気づきにくいタイプの詰まりだったので、原因と直し方をまとめます。

環境

  • Spring Boot 3.5.14
  • Java 21
  • PostgreSQL 16(Docker)

起きたこと

User エンティティを作って起動すると、ログには成功メッセージが出ます。

Started BackendApplication in 1.5 seconds
Tomcat started on port 8080

一見うまくいっています。でも psql でテーブルを確認すると、post しかなく users がありません。

 Schema | Name | Type  |   Owner
--------+------+-------+------------
 public | post | table | reviewpark

ちなみに起動し直すときは、backend ディレクトリで次のように実行していました。

cd backend
./gradlew bootRun

原因

User エンティティから作られるテーブル名が user になります。PostgreSQL では user が特別な意味を持つ名前として扱われるため、そのままテーブル名にするとトラブルの原因になることがあります。
さらに ddl-auto=update では、DDL 実行時の問題がログ上の警告として出ていても、アプリ自体は起動してしまうことがあります。そのため「起動は成功するのにテーブルだけできない」という分かりにくい状態になっていました。

解決

エンティティに @Table を付けて、テーブル名を予約語ではない名前(users)にしました。

@Entity
@Table(name = "users")
public class User {
    // ...
}

これでテーブル名が users になり、無事に作成されました。

本番では注意

今回は学習用として手早く直しました。
実務では、予約語をテーブル名・カラム名に使わない命名が安全です。
どうしても紛らわしい名前になりそうな場合は、@Table@Column で安全な名前を明示します。

学び

エラーが赤く出ないからといって、成功とは限らない、と学びました。
ログの警告を見落とさず、実際に DB を確認する習慣が大事だと思いました。

おわりに

後で見返すよう自分用にメモしておきます。
同じところで詰まった人の参考になれば嬉しいです🙌

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?