如何解决DB列上的Spring JPA错误返回与列名称相关的错误
尝试使用JPA查询Postgres数据库时收到错误消息。
Student.java:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Student {
@Id
@GeneratedValue
private Long id;
private String name;
private String passportNumber;
public Student() {
super();
}
public Student(Long id,String name,String passportNumber) {
super();
this.id = id;
this.name = name;
this.passportNumber = passportNumber;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassportNumber() {
return passportNumber;
}
public void setPassportNumber(String passportNumber) {
this.passportNumber = passportNumber;
}
}
appliction.properties:
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.show-sql=true
spring.datasource.url=jdbc:postgresql://localhost:5432/shorten-db
spring.datasource.username=my_user
spring.datasource.password=my_password
spring.datasource.initialization-mode=always
spring.datasource.initialize=true
spring.datasource.schema=classpath:/schema.sql
spring.datasource.continue-on-error=true
appliction.yml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/shorten-db
username: my_user
password: my_password
driverClassName: org.postgresql.Driver
spring.datasource.schema=classpath:/schema.sql
是指以下架构:
DROP TABLE student;
CREATE TABLE student
(
id varchar(100) NOT NULL,name varchar(100) DEFAULT NULL,passportNumber varchar(100) DEFAULT NULL,PRIMARY KEY (id)
);
当我调用服务“ / students”时:
@PostMapping("/students")
public ResponseEntity<Object> createStudent(@RequestBody Student student) {
Student savedStudent = studentRepository.save(student);
URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
.buildAndExpand(savedStudent.getId()).toUri();
return ResponseEntity.created(location).build();
}
我收到以下错误:
postgres-db | 2020-08-28 21:46:28.108 UTC [257] HINT: Perhaps you meant to reference the column "student0_.passportnumber".
postgres-db | 2020-08-28 21:46:28.108 UTC [257] STATEMENT: select student0_.id as id1_1_,student0_.name as name2_1_,student0_.passport_number as passport3_1_ from student student0_
如何实现消息Perhaps you meant to reference the column "student0_.passportnumber"
中指定的提示我没有明确指定SQL并仅尝试使用JPA。我需要自定义查询还是应该修改学生实体?
解决方法
JPA希望列名采用小写形式,并且每个单词都用下划线分隔。这将转换为驼峰式的Java变量名称。在您的情况下,您具有java变量名,即passportNumber,可转换为passport_number。有三种解决方法:
-
将Java变量重命名为passwordnumber,这意味着它是一个单词。不幸的是,它看起来不太好,因为它违反了Java的变量命名约定。
-
将表列重命名为password_number,从而建立正确的JPA连接。
-
用@Column(name =“ passportNumber”)注释Java变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。