Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring无法识别实体参数_Java_Spring - Fatal编程技术网

Java Spring无法识别实体参数

Java Spring无法识别实体参数,java,spring,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

请问这个错误的原因是什么

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.

在春季运行web应用程序后获得

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;
    }


**
@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);
}
@存储库
公共界面VisiteQuestrepository扩展了JpaRepository{
集合findBystaff_name(字符串staff_name);
}

我尝试过改变我的实体的属性,改变存储库中的方法,但我总是得到同样的错误。有什么我做错了吗?

正如评论中所说的,你应该修复你的标签,例如从
staff\u name
staffName
。但是如果你真的想继续使用这个名字
staff\u name
。 您可以使用以下选项:

@存储库
公共界面VisiteQuestrepository扩展了JpaRepository{
@查询(“从VisiteQuest vr中选择vr,其中vr.staff.staff\u name=?1”)
集合findIt(字符串staff\u name);
}

@存储库
公共界面VisiteQuestrepository扩展了JpaRepository{
集合FindStaff_名称(字符串staff_名称);
}

并在
Staff
中更改getter和setter中的命名,但如果使用
lombok.Data
,则不需要此代码(lombok将生成它)。

查询派生严重依赖于Java命名约定。但是你到处都在违反它们。不要这样做,一切都会变得容易。将员工字段重命名为id、姓名和电子邮件。删除所有的getter和setter,让IDE重新生成它们。然后将方法重命名为findByStaffNameYour
VisitRequest
没有属性
staff\u name
它有一个属性
staff
,该属性有一个属性
staff\u name
。因此,如果有任何问题,您应该使用名为
findBystaff\u staff\u name
的查找程序。你的地图也很奇怪?为什么您要在
员工名
上映射,而不是在
id
上映射?