簡體   English   中英

Hibernate錯誤column0_.id不存在

[英]Hibernate error column0_.id does not exist

我有一個 model class 使用 hibernate 映射到 postgres 數據庫。我的 model class 是:

CheckRes.java

package com.example.demo.model;
import javax.persistence.Id;
import javax.persistence.*;

@Entity
@Table(name="checkers",schema = "public")
public class CheckRes {
    public long getID() {
        return ID;
    }

    public void setID(long ID) {
        this.ID = ID;
    }

    public String getCheck() {
        return check;
    }

    public CheckRes() {
    }

    public void setCheck(String check) {
        this.check = check;
    }

    @Id
    private long ID;

    public CheckRes(String check) {
        this.check = check;
    }

    @Column(name="check")
    private String check;

}

應用程序.properties

spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL9Dialect

spring.jpa.hibernate.ddl-auto = update

下表已存在於數據庫中,創建腳本為:

CREATE TABLE public."checkers"
(
    "ID" bigint NOT NULL,
    "check" character varying(20),
    CONSTRAINT "checkers_pkey" PRIMARY KEY ("ID")
)

TABLESPACE pg_default;

ALTER TABLE public."checkers"
    OWNER to postgres;

稍后,當我嘗試從 postman 調用 controller get 方法時,出現以下錯誤。

org.postgresql.util.PSQLException:錯誤:列 checkres0_.id 不存在 Position:8

如果該表不存在,則 hibernate 會自動創建一個帶有“_”的表,並且沒有錯誤。 但我不需要 hibernate 來創建任何表。 它只需要使用現有的進行 CRUD 操作,我還缺少其他命名約定嗎?

通常,遵循java 命名約定是一個很好的做法。 據此,您應該將ID字段重命名為id

然后正如@User-Upvotedon'tsayThanks 和@a_horse_with_no_name 所注意到的那樣,您應該使用帶引號@Column

@Id
@Column(name="`ID`")
private long id;

此外,您的getter 和 setter應該遵循JavaBean 約定 因此,對於上述字段,您應該具有以下 getter 和 setter:

public long getId() {
   return id;
}
public void setId(long id) {
   this.id = id;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM