結論
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の文字""内に記載のため「"」は「\"」と書く必要がある
この内容で実行すると問題なく実行できる。