Java:不会调用Equals方法

时间:2013-04-13 14:28:23

标签: java

我正在使用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;
    }
}

2 个答案:

答案 0 :(得分:4)

您已正确实施equalshashCode

下一步是将项目添加到集合中,以保证由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
}