我正在使用Spring 3,Hibernate用于我的应用程序,点击搜索按钮显示数据库中的数据
我无法通过覆盖我的DTO中的equals和hashcode来避免重复记录
这是我的Employee DTO类,equals方法根本没有被调用。 请分享您的观点,为什么平等没有被称为
package com.jstlview.hlo;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="EMPLOYEE")
public class EmpHLO {
private String empname,job;
private int empno,deptno;
private double salary,comm;
private Date hiredate;
@Column(name="EMPNAME")
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
@Column(name="JOB")
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Id
@Column(name="EMPNO")
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
@Column(name="DEPTNO")
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
@Column(name="SALARY")
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Column(name="COMMISION")
public double getComm() {
return comm;
}
public void setComm(double comm) {
this.comm = comm;
}
@Column(name="HIREDATE")
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
@Override
public int hashCode()
{
System.out.println("Inside hashcode");
return empname.hashcode;
}
@Override
public boolean equals( Object obj )
{
System.out.println("Into Equals Method");
boolean flag = false;
EmpHLO emp = ( EmpHLO )obj;
if( emp.empname.equals(empname))
flag = true;
return flag;
}
}
答案 0 :(得分:4)
您已正确实施equals
和hashCode
。
下一步是将项目添加到集合中,以保证由equals
定义的唯一项目。
根据您的评论,您目前正在使用ArrayList
- 这不是一个集合。这是List
的实现,它是一个可扩展的索引集合,它使用Array
作为后备集合。
您需要使用HashSet
。
Set
接口用于保证唯一项目的集合。 HashSet
是一种使用equals
进行比较的实现。有关详细信息,请查看javadoc。
答案 1 :(得分:1)
您必须查看您的哈希码方法:
@Override
public int hashCode()
{
System.out.println("Inside hashcode");
return empname; // Cannot return string value
}