Java 休眠错误column0\uID不存在
我有一个使用hibernate映射到postgres数据库的模型类。我的模范班是: CheckRes.javaJava 休眠错误column0\uID不存在,java,postgresql,spring-boot,hibernate,Java,Postgresql,Spring Boot,Hibernate,我有一个使用hibernate映射到postgres数据库的模型类。我的模范班是: CheckRes.java package com.example.demo.model; import javax.persistence.Id; import javax.persistence.*; @Entity @Table(name="checkers",schema = "public") public class CheckRes { public
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;
}
应用程序属性
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.dialogue=org.hibernate.dialogue.postgresql9dialogue
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;
稍后,当我试图从邮递员处调用controller get方法时,我得到以下错误
org.postgresql.util.psqleexception:错误:列checkres0\uu0.id不存在
职位:8
如果该表不存在,则hibernate会自动创建一个带有“\”的表,并且没有错误。但是我不需要hibernate来创建任何表。它只需要在CRUD操作中使用现有的命名约定,我还缺少其他命名约定吗?一般来说,这是一个很好的实践。根据这一点,您应该将
ID
字段重命名为ID
然后正如@User-Upvotedon'tsaytanks和@a_horse_(没有名字)所注意到的,您应该使用@Column
:
您还应该遵循JavaBean约定。因此,对于上述字段,您应该具有以下getter和setter:
public long getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
一般来说,这是一个很好的做法。根据这一点,您应该将ID
字段重命名为ID
然后正如@User-Upvotedon'tsaytanks和@a_horse_(没有名字)所注意到的,您应该使用@Column
:
您还应该遵循JavaBean约定。因此,对于上述字段,您应该具有以下getter和setter:
public long getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
也可以是引号needed@SternK:但是“ID”
不同于ID
(或ID
)@一匹没有名字的马你说得对!我已经更正了答案。@User-Upvotedon'tsayThanks它有效!我测试过了。实际上,当hibernate发出查询时,它的内容“”也可能是引号needed@SternK:但是“ID”
不同于ID
(或ID
)@一匹没有名字的马你说得对!我已经更正了答案。@User-Upvotedon'tsayThanks它有效!我测试过了。实际上,当hibernate发布query it contents“”时,您应该真正避免使用那些可怕的带引号的标识符。他们的麻烦比他们值得的多得多如果这也能解决你目前的问题,我也不会感到惊讶hand@a_horse_with_no_name:你能提供你的意见作为回答吗?这样我就可以接受了。基本上,将列名从“ID”改为“ID”是可行的,实际上,在创建列时不要使用双引号(”
),这样它就变成了区分大小写的用法,比如ID bigint NOT NULL
,然后默认情况下它变成了ID
。不过,如果您想使用“ID”
,那么在JPA中,您应该使用@列(“\'ID\”)
与引号进行映射,因为hibernate默认不使用引号,所以在查询时它变成了ID
。您应该真正避免那些可怕的引号标识符。他们的麻烦比他们值得的多得多如果这也能解决你目前的问题,我也不会感到惊讶hand@a_horse_with_no_name:你能提供你的意见作为回答吗?这样我就可以接受了。基本上,将列名从“ID”改为“ID”是可行的,实际上,在创建列时不要使用双引号(”
),这样它就变成了区分大小写的用法,比如ID bigint NOT NULL
,然后默认情况下它变成了ID
。不过,如果您想使用“ID”
,那么在JPA中,您应该使用@列(“\'ID\”)
和引号进行映射,因为hibernate默认情况下不使用引号,所以在查询时它变成了ID
。
@Id
@Column(name="`ID`")
private long id;