多次保存记录
问题描述:
我试图保存数据库中的记录,保存成功,但是当我点击保存按钮时,每次记录保存在表格中。我的意思是一个记录多次保存。多次保存记录
public void saveEmployeeDetails(Employee employeeDetails){
try{
System.out.println("----saveEmployeeDetails----");
getSession().saveOrUpdate(employeeDetails);
}
catch (Exception e) {
e.printStackTrace();
}
}
我想只保存一次。我的代码有什么问题?
Java类
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;
}
}
HBM文件
<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>
答
Hibernate使用的对象equlaity.in你的情况下,同一个对象得到保存,但与differend id.
实体id
如果你想防止您的数据库中的重复条目为您的问题。请在实体类中覆盖equals()
和hashcode()
方法。在此使用saveUpdate()
,因此它可以调用基于标识符是否存在或不存在或update()
。例如,如果存在标识符,则将调用update(),否则将调用save()
。
它的我的假设基于您的问题,如果这不是问题,那么请发布您的完整代码。
答
从您的问题,它看起来像你应该empId作为你的主要关键。当数据模式没有任何业务密钥时,应使用代理键。 如果你这样做,那么对于给定的员工,hibernate不会为给定的员工插入多条记录。
您的ID每次都在更改给定的员工,这导致了许多插入。
+0
是的,现在如何解决它。我可以删除身份证吗? – Java
您可以分享您的员工类,看起来像是每次保存时的主键更改。 – Ouney
你的问题不清楚提供一个答案。请阅读http://*.com/help/how-to-ask – vels4j
在数据库中使用相同的ID – Zia