首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CRUDRepository findBy外键id导致异常:无法在此ManagedType上找到具有给定名称[classroomId]的属性

CRUDRepository findBy外键id导致异常:无法在此ManagedType上找到具有给定名称[classroomId]的属性
EN

Stack Overflow用户
提问于 2020-07-05 02:06:55
回答 1查看 138关注 0票数 0

在通过外键创建自定义findBy方法时,我得到了一个异常。

实体类:

代码语言:javascript
运行
复制
@Entity
@Getter
@Setter
public class Thread {

  private @Id @GeneratedValue Long id;
  private String subject;

  @ManyToOne(fetch = FetchType.LAZY)
  @JsonIgnore
  private Classroom classroom;

  protected Thread() {}

  public Long getClassroomId() {
    return this.classroom.getId();
  }
}

ThreadRepository类:

代码语言:javascript
运行
复制
public interface ThreadRepository extends CrudRepository<Thread, Long> {
  List<Thread> findByClassroomId(Long id);
}

我得到了一个例外:

代码语言:javascript
运行
复制
java.lang.IllegalArgumentException: Unable to locate Attribute  with the the given name [classroomId] on this ManagedType [com.futurerprood.unicycleservice.entity.threads.Thread]

但是如果我删除Thread类中的getClassroomId(),异常就会消失。我有这个函数,以便json序列化在端点响应中只获取教室id,而不是整个教室对象。

为什么这个函数会导致找不到外键?

EN

回答 1

Stack Overflow用户

发布于 2020-07-05 02:56:36

您可以执行以下操作之一:

  • 提供对存储库方法

的查询

代码语言:javascript
运行
复制
   @Query("select e from Thread t join t.classroom c where c.id = :id")
   List<Thread> findByClassroomId(Long id);

  • 将存储库方法重命名为

代码语言:javascript
运行
复制
   List<Event> findByClassroom_Id(Long id);

更新

解释为什么这两个是工作的

首先,看看JPA,并理解基于方法名的属性遍历是如何在Spring data JPA中发生的,以便生成查询,以及如何解决第一个问题。我们告诉spring data,它不需要进行属性遍历来生成

  • 查询,因为我们给出了查询,所以它不会得到任何ambiguity.
  • In。第二个,正如参考资料中所建议的那样,我们正在通过告诉它首先去教室对象来解决Spring Data JPA的歧义问题。但正如@crizzis在问题评论中指出的那样,Spring data一开始就应该将其视为歧义
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62732709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档