首页 > 解决方案 > findById() 给出没有找到属性 ID

问题描述

我有三个实体。(我使用 xxx 作为这个例子的占位符)

我已经设置了他们所有@Entities

@Entity
@Table(name = "xxx")
public class xxx {

@Id
@Column(name = "xxx_id")
int xxx_id;

但是,我能够做到:

findById(int ...)仅适用于其各自存储库中的一个实体。当我尝试对其他两个实体执行此操作时,我遇到了这个问题:

“无效的派生查询!找不到类型 xxx 的属性 ID!”

我能够运行它并获得正确的结果。但是为什么我会为两个实体而不是另一个实体收到此错误?

我以完全相同的方式设置实体及其存储库。唯一的区别是,在其存储库不返回任何错误的实体中,我将该实体与另一个存储库失败的实体连接起来,但我在该部分中使用了“mappedBy”@JoinColumns

这可能与为什么那个人没有问题有关吗?

标签: springpostgresqlhibernatespring-bootjpa

解决方案


findBy... 是如何工作的?

Entity:
private int clientid;
private String firstname;
private String lastname;

询问:

findBy<Name_as_per_entity>
findByClientid(int clientid);
findByFirstnameAndLastname(String firstname, String lastname)

解决方案

因为我们将下划线字符视为保留字符,我们强烈建议遵循标准的 Java 命名约定(即,不在属性名称中使用下划线,而是使用驼峰式大小写)。

文档

下划线 _是 Spring Data 查询派生中的保留字符,可能允许手动属性路径描述。

坚持使用 骆驼大小写成员变量名称的 Java 命名约定,一切都会按预期工作。

另请参阅此


推荐阅读