0

我的 pojo 看起来像这样:

@Entity
@Table(name = "USERS")
public class User {

当我将名称保留在那里时,一切正常,休眠 sql 日志:

 create table users (id int8 not null, username varchar(255), primary key (id))

当我删除注释时,我得到:

Hibernate: create table user (id int8 not null, username varchar(255), primary key (id))
19:24:43 [localhost-startStop-23] ERROR o.h.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: create table user (id int8 not null, username varchar(255), primary key (id))
19:24:43 [localhost-startStop-23] ERROR o.h.tool.hbm2ddl.SchemaExport - ERROR: syntax error at or near "user" Position: 14

我正在尝试使用它,因为它在我的 xml 中定义:

<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />

任何建议,为什么命名策略不起作用?

4

2 回答 2

6

默认表名USER是保留关键字。在这种情况下,您必须name明确指定才能为其添加必要的转义:

@Entity
@Table(name = "`USER`")
public class User { ... }
于 2012-12-03T17:53:42.940 回答
1

PostgreSQL 关键字列表:

http://www.postgresql.org/docs/9.1/static/sql-keywords-appendix.html

标记为“保留”的是那些不允许作为列名或表名的标记。

还有你的表名:

用户保留

实际上是保留的。

所以你不能创建user在 PostgreSQL 中命名的表。这就是为什么使用注解一切正常,因为注解指定了 name users。没有这样的关键字。

于 2012-12-03T17:52:23.033 回答