![](/img/trans.png)
[英]org.postgresql.util.PSQLException: Error: column systementi0_.id does not exist - Hibernate, PostgreSql
[英]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.