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

Dil*_*mar 2 java postgresql hibernate

为了确保失败,我总是在映射类中使用双引号。这仅适用于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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在尝试使用Am获取以下异常时进行插入:

org.postgresql.util.PSQLException: The column nameIDwas 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)
);
Run Code Online (Sandbox Code Playgroud)

小智 5

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

hibernate.globally_quoted_identifiers=true
Run Code Online (Sandbox Code Playgroud)

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