首页 > 解决方案 > 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);
}

我尝试更改实体的属性,更改存储库中的方法,但我一直收到相同的错误。有什么我做错了吗?

标签: javaspring

解决方案


正如评论中所说,您应该修复标签,例如 from staff_nameto 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 将生成它)。


推荐阅读