2016-01-06 36 views
1

对于失败安全,我总是在映射类中使用双引号。而这仅适用于PostgreSQL的如果使用双引号,则无法插入使用Hibernate的行

这里是我的类:

@Entity 
@Table(name="`Person`" 
    ,schema="public" 
) 
public class Person implements java.io.Serializable { 

    private Integer id; 
    private String name; 
    private String address; 

    public Person() { 
    } 


    @Id @GeneratedValue(strategy=IDENTITY) 
    @Column(name="`ID`", nullable=false) 
    public Integer getId() { 
     return this.id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    @Column(name="`Name`") 
    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Column(name="`Address`") 
    public String getAddress() { 
     return this.address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 
} 

当我试图用我得到异常下面插入:

org.postgresql.util.PSQLException: The column name ID was not found in this ResultSet.

查询它跑了插入物:

insert into public."Person" ("Address", "Name") values (?, ?)

由于其他原因,我无法删除双引号。

请帮我解决这个问题。

更新: 数据库模式:

CREATE TABLE "Person" 
(
    "ID" INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('"Person_ID_seq"'::regclass), 
    "Name" VARCHAR(255), 
    "Address" VARCHAR(255) 
); 
+0

在表中,列的名称是“ID”? –

+0

是的,列名是“ID” –

+1

使用'@Column(name =“\”ID \“”,nullable = false)' –

回答

2

如果一切都需要被引用,添加以下标志hibernate.properties还是persistence.xml文件

hibernate.globally_quoted_identifiers=true 

,并删除所有的单引号从班级人员。但是,请注意,对于Postgresql,将表/列名等放在双引号中有效地将它们转换为区分大小写。因此,数据库中表/列的情况必须与@Table和@Column注释中相应名称的精确匹配。