java - Spring无法识别实体参数
问题描述
请问这个错误是什么原因
nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Collection com.Vportal.data.reposito
ry.VisitRequestRepository.findBystaff_name(java.lang.String)! No property name found for type Staff! Traversed path: VisitRequest.staff.
在春季运行网络应用程序后得到?
staff.java
@Data
@Entity
public class Staff {
@Id
private int staff_id;
private String staff_name;
private String staff_email;
@OneToMany(targetEntity = VisitRequest.class, fetch = FetchType.LAZY, mappedBy = "staff")
private List<VisitRequest> visitRequest;
public String getstaff_name()
{
return staff_name;
}
public void setStaff_name(String staff_name)
{
this.staff_name = staff_name;
}
public String getstaff_email()
{
return staff_email;
}
public void setStaff_email(String staff_email)
{
this.staff_email = staff_email;
}
public void setstaff_id(int staff_id)
{
this.staff_id = staff_id;
}
public int getstaff_id()
{
return staff_id;
}
**
VisitRequest.java
@Entity
public class VisitRequest {
@Id
private String token;
private String comment;
private Date timestamp;
private boolean status;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "staff_name", referencedColumnName = "staff_name",nullable = false)
private Staff staff;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Visitor_id")
private Visitor visitor;
public String getToken(){
return token;
}
public void setToken(String token){
this.token = token;
}
public String getComment(){
return comment;
}
public void setComment(String comment){
this.comment = comment;
}
public Date getTimestamp(){
return timestamp;
}
public void setTimestamp(Date timestamp){
this.timestamp = timestamp;
}
}
VisitRequestRepository
@Repository
public interface VisitRequestRepository extends JpaRepository<VisitRequest, Long> {
Collection<VisitRequest> findBystaff_name (String staff_name);
}
我尝试更改实体的属性,更改存储库中的方法,但我一直收到相同的错误。有什么我做错了吗?
解决方案
正如评论中所说,您应该修复标签,例如 from staff_name
to staffName
。但如果你真的要坚持这个名字staff_name
。比你可以使用这个:
@Repository
public interface VisitRequestRepository extends JpaRepository<VisitRequest, Long> {
@Query("SELECT vr FROM VisitRequest vr WHERE vr.staff.staff_name = ?1")
Collection<VisitRequest> findIt (String staff_name);
}
或者
@Repository
public interface VisitRequestRepository extends JpaRepository<VisitRequest, Long> {
Collection<VisitRequest> findStaffStaff_name(String staff_name);
}
并在 getter 和 setter 中更改命名Staff
,但如果使用lombok.Data
则不需要此代码(lombok 将生成它)。
推荐阅读
- node.js - 仅检索 MongoDB 集合中对象数组中的查询元素并将其添加到另一个文档中作为参考
- angular - 来自解析器的 Angular 7 rxjs 订阅有什么问题
- excel - 在使用 VBA 循环遍历范围时查找确切的字符串
- ng-modules - Angular 8:没有为组件找到组件工厂-甚至在 app.module.ts 中添加
- excel - 如何检查此代码中是否存在工作表
- group-by - 如何不让 dplyr 变异计算缺失组
- php - 如何在 Laravel 应用程序中使一个类全局可访问?
- vue.js - Vue 组件中 HTML 元素 id 的作用域
- swift - Swift (macOS):使用文件启动 TextEdit
- java - 如何从 Web 应用程序中预选特定打印机