Wygląda na to, że PostgreSQL nie pozwala na utworzenie tabeli bazy danych o nazwie „user”. Ale MySQL pozwoli stworzyć taką tabelę.
Czy to dlatego, że jest to słowo kluczowe? Ale Hibernate nie może zidentyfikować żadnego problemu (nawet jeśli ustawimy PostgreSQLDialect).
Odpowiedzi:
user
jest słowem zastrzeżonym i zwykle nie jest dobrym pomysłem używanie słów zastrzeżonych jako identyfikatorów (tabel, kolumn).Jeśli nalegasz na zrobienie tego, musisz umieścić nazwę tabeli w podwójnych cudzysłowach:
create table "user" (...);
Ale wtedy zawsze musisz używać podwójnych cudzysłowów podczas odwoływania się do tabeli. Dodatkowo w nazwie tabeli rozróżniana jest wielkość liter.
"user"
to inna nazwa tabeli niż"User"
.Jeśli chcesz zaoszczędzić sobie wielu kłopotów, użyj innej nazwy.
users
,,user_account
...Więcej szczegółów na temat cytowanych identyfikatorów można znaleźć w podręczniku: http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
źródło
Możliwe jest określenie nazwy tabeli za pomocą JPA z następującą składnią:
źródło
column user0_.id does not exist
Mieliśmy ten sam problem już dawno i właśnie zmieniliśmy nazwę tabeli z
user
naapp_user
. Dzięki wykorzystaniu Hibernate / JPA. Myśleliśmy, że w ten sposób będzie łatwiej. Mam nadzieję, że ta mała poprawka pomoże komuś innemu.źródło
Można stworzyć tabelę
user
w innym schemacie niżpublic
. Przykład:CREATE SCHEMA my_schema; CREATE TABLE my_schema.user(...);
źródło