【问题标题】:findById() gives No property Id foundfindById() 给出没有找到属性 ID
【发布时间】:2019-11-19 12:25:54
【问题描述】:

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

我已经用

设置了他们所有的@Entities
@Entity
@Table(name = "xxx")
public class xxx {

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

但是,我能够做到:

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

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

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

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

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

【问题讨论】:

  • findById 方法需要在实体类中有一个名为id 的字段。但是在您的 xxx 课程中,您有 xxx_id,而不是 id

标签: spring postgresql hibernate spring-boot jpa


【解决方案1】:

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 命名约定(即 不在属性名称中使用下划线,而是使用驼峰式大小写)。

Doc

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

坚持使用 camel-case 作为成员变量名称的 Java 命名约定,一切都会按预期工作。

Also Refer this

【讨论】:

  • 我同意这个答案。使用 CamelCase 并编写 findByxxxId(int xxxId)
  • 谢谢。您提供的链接对于确定 SQL 如何分解名称非常有帮助。我将我的变量设置为:“xxxId”@Column,如“xxx_id”和存储库函数,如“findByxxxId”
猜你喜欢
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多