java.lang.IllegalArgumentException - PullRequest
       1

java.lang.IllegalArgumentException

0 голосов
/ 15 августа 2011

Я столкнулся с ошибкой при реализации метода в 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 реализует Serializable {

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();

Мой фасадlocal:

public String getVerifyCodeByName(String name);

Я не уверен, какая переменная содержит ошибку.(

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Я думаю, что проблема встает на линию:

Staff temp = staffBean.find(authcode);

Вы пытаетесь найти экземпляр Staff, основываясь на строке. Но поиск, который вы хотели бы сделать, должен основываться на Integer, так как это ваш атрибут @Id.

0 голосов
/ 15 августа 2011

Какой первичный ключ вашего объекта персонала? Вы не показываете нам весь класс. В сообщении об ошибке говорится, что ожидается, что вы передадите целое число, а вы передаете строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...