记录保存多次

时间:2016-11-23 07:24:43

标签: java hibernate

我正在尝试在数据库中保存记录,保存成功但是当我点击保存按钮时,每次记录保存在表格中。我是指多次保存一条记录。

public class Employee { 
private long id;
private String empid;
private String empname; 

public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
public String getEmpid() {
    return empid;
}
public void setEmpid(String empid) {
    this.empid = empid;
}
public String getEmpname() {
    return empname;
}
public void setEmpname(String empname) {
    this.empname = empname;
}   
}

我只想保存一次。我的代码有什么问题?

java class

<hibernate-mapping>
<class name="org.hibernatejavaapp.Employee" table="EMP_DETAILS">
    <id name="id" type="long">
        <generator class="native"></generator>
    </id>
    <property name="empid" column="EMPID" type="string" length="255" not-null="true" />
    <property name="empname" column="EMPNAME" type="string" length="255" not-null="true" />     
</class>
</hibernate-mapping>

hbm文件

column1   |   column2   |  column3
----------------------------------
  A       |     23     |  blue
  A       |     23     |  orange
  A       |     45     |  yellow
  A       |     45     |  yellow
  A       |     45     |  blue
  A       |     60     |  green
  A       |     60     |  green
  A       |     75     |  pink

2 个答案:

答案 0 :(得分:0)

Hibernate使用实体的id作为Object equlaity。在你的情况下,相同的对象被保存,但是带有差异id.如果你想防止数据库中的重复条目出现问题。请覆盖实体类中的equals()hashcode()方法。在这里使用saveUpdate(),因此根据标识符调用save()update()或不。例如,如果存在标识符,则将调用update(),否则将调用save()

根据您的问题我的假设是否不是问题,请发布您的完整代码。

答案 1 :(得分:0)

从您的问题来看,您似乎应该将其作为主键。当您的数据模式没有任何业务密钥时,应使用代理键。 如果您这样做,那么对于给定的员工,hibernate将不会为给定的员工插入多个记录。

对于给定员工而言,您的ID每次都在变化,导致许多插入。