2
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?

More than 1 year has passed since last update.

H2データベースにuserのテーブルを作る方法

Posted at

結論

userをクォート「"」で囲むと作成できる

結論に至るまでの経緯

Entityクラスの作成で、テーブル名userを次のコードで作成するとエラーが発生した。

.java
@Table(name = "user")
エラー内容(一部省いている)
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table user (id bigint not null, gender varchar(6) not null, name varchar(20) not null, primary key (id))" via JDBC Statement
…
…
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: SQLステートメントに文法エラーがあります "create table [*]user (id bigint not null, gender varchar(6) not null, name varchar(20) not null, primary key (id))"; 期待されるステートメント "identifier"
Syntax error in SQL statement "create table [*]user (id bigint not null, gender varchar(6) not null, name varchar(20) not null, primary key (id))"; expected "identifier"; SQL statement:
create table user (id bigint not null, gender varchar(6) not null, name varchar(20) not null, primary key (id)) [42001-214]

Webで色々と調べても解決できなかったため、Chat-GPT-3.5にエラーコードを入力し解決方法を質問してみると
テーブル名「user」がH2データベースの予約語や制約に違反している可能性がある
と回答が返ってきた
試しにテーブル名をusertestで実行するとエラーがなくなった。
H2の予約語について調べると次のサイトが見つかった。

内容を見ると、H2データベースでuserは予約語として指定されており、このままでは使えないが
userをクォート「"」で囲めば使えることが分かった。
当初のコードに適用すると、次のコードになる。

.java
@Table(name = "\"user\"")  //javaの文字""内に記載のため「"」は「\"」と書く必要がある

この内容で実行すると問題なく実行できる。

2
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
2
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?