Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate将用户模型保存到Postgres_Java_Hibernate_Postgresql_Orm - Fatal编程技术网

Java Hibernate将用户模型保存到Postgres

Java Hibernate将用户模型保存到Postgres,java,hibernate,postgresql,orm,Java,Hibernate,Postgresql,Orm,我通过Hibernate(注释)使用Postgres,但似乎在处理用户对象时遇到了麻烦: 12:09:16,442 ERROR [SchemaExport] Unsuccessful: create table User (id bigserial not null, password varchar(255), username varchar(255), primary key (id)) 12:09:16,442 ERROR [SchemaExport] ERROR: syntax er

我通过Hibernate(注释)使用Postgres,但似乎在处理用户对象时遇到了麻烦:

12:09:16,442 ERROR [SchemaExport] Unsuccessful: create table User (id  bigserial not null, password varchar(255), username varchar(255), primary key (id))
12:09:16,442 ERROR [SchemaExport] ERROR: syntax error at or near "User"
如果我手动运行SQL,我必须在表名周围加引号,因为user似乎是postgres关键字,但是我如何说服hibernate自己这样做呢


提前感谢。

用户是,请找到更好的名称或使用引号:“用户”。(这个主意不好,但是如果你在任何地方都这样做,它就会起作用)

当使用保留关键字时,你需要转义表名。在JPA 1.0中,没有标准化的方法,特定于Hibernate的解决方案是使用backticks:

@Entity
@Table(name="`User`")
public class User {
    ...
}
在JPA 2.0中,标准化语法如下所示:

@Entity
@Table(name="\"User\"")
public class User {
    ...
}
工具书类
  • Hibernate核心文档
  • JPA2.0规范
    • 2.13数据库对象的命名

避免使用这样的名称通常是一种很好的做法……尤其是如果定期切换数据库,因为一个数据库中的标识符可能是另一个数据库中的关键字。好的样式应该是与应用程序相关的前缀/后缀:“myapp_user”作为表名而不是“user”……Hibernate默认不引用表名有什么原因吗?我想不出这在任何情况下都是有用的。@Mr.Omsn:Quoting默认情况下是关闭的,因为JPA查询语言要翻译成纯SQL。在SQL中,表名和列名等标识符是区分大小写的。所以SQL会考虑<代码>用户<代码>和<代码>用户<代码>相同的表。但是
“User”
“User”
将是不同的表,它们也可以同时存在。PostgreSQL和SQL标准之间的唯一区别是:PG折叠为小写,而SQL折叠为大写。