java.lang.IllegalArgumentException
我在Netbeans中实现方法时遇到了错误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实现
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呢?