java.lang.IllegalArgumentException

java.lang.IllegalArgumentException,java,netbeans,Java,Netbeans,我在Netbeans中实现方法时遇到了错误 java.lang.IllegalArgumentException: You have provided an instance of an incorrect PK class for this find operation. Class expected : class java.lang.Integer, Class received : class java.lang.String. 以下是该方法中使用的实体: 公共类Staff实现

我在Netbeans中实现方法时遇到了错误

java.lang.IllegalArgumentException: You have provided an instance of
an incorrect PK class for this find operation.
  Class expected : class java.lang.Integer,
  Class received : class java.lang.String.
以下是该方法中使用的实体:

公共类Staff实现可序列化{

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)

@Column(name = "STAFF_ID")
private Integer staffId;
@Size(max = 30)
@Column(name = "NAME")
private String name;
@Size(max = 100)
@Column(name = "PASSWORD")
private String password;
@Size(max = 20)
@Column(name = "ROLES")
private String roles;

@Size(max = 60)
@Column(name = "EMAIL")
private String email;
@Size(max = 20)
@Column(name = "VERIFYSTATUS")
private String verifystatus;
@Size(max=10)
@Column(name = "VERIFYCODE")
private String verifycode;

public Staff() {
}

public Staff(Integer staffId) {
    this.staffId = staffId;
}

public Integer getStaffId() {
    return staffId;
}

public void setStaffId(Integer staffId) {
    this.staffId = staffId;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getRoles() {
    return roles;
}

public void setRoles(String roles) {
    this.roles = roles;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getVerifyStatus() {
    return verifystatus;
}

public void setVerifyStatus(String verifystatus){
    this.verifystatus= verifystatus;
}

public String getVerifyCode() {
    return verifycode;
}
   public void setVerifyCode(String verifycode){
       this.verifycode= verifycode;
   }

@Override
public int hashCode() {
    int hash = 0;
    hash += (staffId != null ? staffId.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Staff)) {
        return false;
    }
    Staff other = (Staff) object;
    if ((this.staffId == null && other.staffId != null) || (this.staffId != null && !this.staffId.equals(other.staffId))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "entity.Staff[ staffId=" + staffId + " ]";
}
}

我的控制器中的方法:

public String verify(){
String result = "failed";
String authcode = staffBean.getVerifyCodeByName(getLoginUserName()); 
//get verifycodefrom database by name
Staff temp = staffBean.find(authcode);

if ( code.equals(authcode)){
    result ="success";
    temp.setVerifyCode("");
    temp.setVerifyStatus("Verified");
    staffBean.edit(temp);
}
return result;
我的门面:

@Override
 public String getVerifyCodeByName(String name) {
 Query q = em.createNamedQuery("Staff.getVerifyCodeByName");
 q.setParameter("name", name);
 return ((String) q.getSingleResult()).toString();
我的教授:

public String getVerifyCodeByName(String name);

我不确定哪个变量有错误:(

您的Staff对象的主键是什么?您没有向我们显示整个类。错误消息是您要传递一个整数,而您要传递的是一个字符串。

我猜问题出在这一行:

Staff temp = staffBean.find(authcode);

您尝试根据字符串搜索Staff实例。但是您希望执行的搜索应该基于整数,因为这是您的@Id属性。

您是否也将字段
verifyCode
注释为
@Id
?我猜您的实体类没有声明
@Id
字段或声明不同的(非字符串)
@Id
字段。@Id的注释在我代码的开头。为什么这与Netbeans有关?主键是我的staffId。编辑过,对此很抱歉。在我的验证方法中,使用的两个参数都是字符串。我通过引用使用整数而不是字符串的类似门面代码更改了门面代码。所以我猜可能是我的错误那么我应该放什么变量来代替@Id呢?