如果使用双引号,则使用Hibernate无法插入行

时间:2016-01-06 13:10:01

标签: java hibernate postgresql

对于故障安全,我总是在我的映射类中使用双引号。这只适用于 PostgreSQL

这是我的班级:

@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;
    }
}

当我尝试插入使用Am获得以下异常时:

org.postgresql.util.PSQLException: The column name编号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)
);

1 个答案:

答案 0 :(得分:4)

如果需要引用所有内容,请将以下标志添加到hibernate.properties或persistence.xml文件

hibernate.globally_quoted_identifiers=true

并删除Person类中的所有单引号。但是,请注意,对于Postgresql,将表/列名称等放在双引号中会有效地将它们转换为区分大小写。因此,数据库中表/列的大小写必须与@Table和@Column批注中的相应名称完全匹配。