java PropertyReferenceException:按project_id排序时找不到类型“Project”的属性“project "

mfpqipee  于 2024-01-05  发布在  Java
关注(0)|答案(2)|浏览(196)

在My SpringBoot/JPA(Postgres)项目中,
我有一个项目表,定义为:

  1. create table projects(
  2. project_id int primary key,
  3. name varchar(255),
  4. description text
  5. );

字符串
在我的控制器中,我有一个获取项目列表的方法:

  1. @GetMapping("/list")
  2. @ResponseBody
  3. public Page<Project> list(@AuthenticationPrincipal UserDetails currentUserDetails) {
  4. int page = 0;
  5. int size = 100;
  6. Sort sort = Sort.by("name").ascending();
  7. PageRequest p = PageRequest.of(page, size, sort);
  8. return projectService.list(p);
  9. }


这一切都很好。当我将这段代码改为按project_id列排序时,问题出现了:

  1. Sort sort = Sort.by("project_id").ascending();


现在,我得到了以下异常:
2024-01-01T14:34:04,424 ERROR [http-nio-8081-exec-6] o.a.j.l.DirectJDKLog:Servlet.service()for servlet [dispatcherServlet] in context with path [] throughed exception [Request processing failed:org.springframework.data.mapping.PropertyReferenceException:No property 'project' found for type 'Project'] with root cause org.springframework.data.mapping.PropertyReferenceException:在org. springframework. data. mapping. PropertyPath中找不到类型“Project”的属性“project”。(PropertyPath.java:90)
我的Project实体类非常简单:

  1. @Entity
  2. @Table(name = "Projects")
  3. public class Project {
  4. @Id
  5. @GeneratedValue(generator = "ProjectSeq")
  6. @SequenceGenerator(name = "ProjectSeq", sequenceName = "PROJECTS_PROJECT_ID_SEQ", allocationSize = 1)
  7. Integer project_id;
  8. String name;
  9. public Integer getProject_id() {
  10. return project_id;
  11. }
  12. public void setProject_id(Integer project_id) {
  13. this.project_id = project_id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getDescription() {
  22. return description;
  23. }
  24. public void setDescription(String description) {
  25. this.description = description;
  26. }
  27. String description;
  28. }


我是不是陷入了一个保留字的境地?

wgx48brx

wgx48brx1#

这里的问题是由于在构建PropertyPath示例时,下划线被解释为下划线。此时,您的project_id将被拆分为project + id
要修复它,您可以更改实体类以使用camelCase属性。像这样:

  1. @Column(name = "project_id")
  2. Integer projectId;
  3. public Integer getProjectId() {
  4. return projectId;
  5. }
  6. public void setProjectId(Integer projectId) {
  7. this.projectId = projectId;
  8. }

字符串
使用@Column注解,您将获得未更改的数据库列名,但Java名称将在camelCase中-建议用于属性。

h7wcgrx3

h7wcgrx32#

下划线被视为Spring Data JPA文档中提到的保留字符:
由于我们将下划线字符视为保留字符,因此强烈建议遵循标准Java命名约定(即,在属性名中不使用下划线,而是使用驼峰大小写)。
您应该将project_id属性更改为projectId。它不需要对数据库进行任何更改,因为默认情况下会完成从camel case到snake case的转换。

相关问题