如何修复和/或优化Spring JPA查询方法的此实现?

时间:2019-02-07 07:09:40

标签: hibernate jpa spring-data-jpa mapping bidirectional

我正在尝试从定义为ManyToOne关系的JoinColumn的键字段中实现jpa查询方法。

这是我正在使用的应用程序的一部分,该应用程序是使用Spring 5和Jpa 2.1版本使用Maven构建的。

架构的预期行为:“ A”实体(主键= a_id)必须归“ B”实体(主键= b_id)所有,其中B在A中可以拥有多个条目。从数据库的角度来看,我需要将外键b_id存储在A实体中,而不是相反。

class A  {

 @id
 Long a_id;

 @ManyToOne(optional = false)
 B b;
}

class B {

  @id
  Long b_id;

  @OneToMany(mappedBy = "b_id", cascade = CascadeType.ALL)
  @Transient
  private Set<Jobs> jobs;

}

//我可以对此模型进行任何更正或简化吗?

//现在,我尝试使用查询方法提取所有具有特定b_id的A条目

ARepository extends JpaRepository<A, Long> { 
    Optional<List<A>> findByB_id(Long B_id);
}

这是我通过这种方法得到的错误:

Error: Unable to locate Attribute with the the given name [B_id] on this ManagedType [<package_path>.A]

1 个答案:

答案 0 :(得分:1)

mappedBy引用了逆关系,在您的示例中b而不是b_id

所以改变

@OneToMany(mappedBy = "b_id", cascade = CascadeType.ALL)

@OneToMany(mappedBy = "b", cascade = CascadeType.ALL)