PostgreSQL似乎不允许创建名为“ user”的数据库表。但是MySQL将允许创建这样的表。
那是因为这是一个关键词吗?但是Hibernate无法识别任何问题(即使我们设置了PostgreSQLDialect)。
PostgreSQL似乎不允许创建名为“ user”的数据库表。但是MySQL将允许创建这样的表。
那是因为这是一个关键词吗?但是Hibernate无法识别任何问题(即使我们设置了PostgreSQLDialect)。
Answers:
user
是保留字,通常不建议使用保留字作为标识符(表,列)。
如果您坚持要这样做,则必须将表名放在双引号中:
create table "user" (...);
但是,在引用表时,您总是需要使用双引号。此外,表名区分大小写。"user"
表名称不同于"User"
。
如果您想节省很多麻烦,请使用其他名称。users
,user_account
,...
可以在手册中找到有关带引号的标识符的更多详细信息:http : //www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
可以使用以下语法通过JPA指定表名:
@Table(name="\"user\"")
column user0_.id does not exist
前一次我们也遇到过同样的问题,只是将表名从更改user
为app_user
。由于使用了Hibernate / JPA。我们认为这样会更容易。希望此小技巧可以对其他人有所帮助。