2016-01-06 15 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註釋中相應名稱的精確匹配。