对于故障安全,我总是在我的映射类中使用双引号。这只适用于 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)
);
答案 0 :(得分:4)
如果需要引用所有内容,请将以下标志添加到hibernate.properties或persistence.xml文件
hibernate.globally_quoted_identifiers=true
并删除Person类中的所有单引号。但是,请注意,对于Postgresql,将表/列名称等放在双引号中会有效地将它们转换为区分大小写。因此,数据库中表/列的大小写必须与@Table和@Column批注中的相应名称完全匹配。