多次保存记录

问题描述:

我试图保存数据库中的记录,保存成功,但是当我点击保存按钮时,每次记录保存在表格中。我的意思是一个记录多次保存。多次保存记录

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> 
+0

您可以分享您的员工类,看起来像是每次保存时的主键更改。 – Ouney

+0

你的问题不清楚提供一个答案。请阅读http://*.com/help/how-to-ask – vels4j

+0

在数据库中使用相同的ID – Zia

Hibernate使用的对象equlaity.in你的情况下,同一个对象得到保存,但与differend id.实体id如果你想防止您的数据库中的重复条目为您的问题。请在实体类中覆盖equals()hashcode()方法。在此使用saveUpdate(),因此它可以调用基于标识符是否存在或不存在或update()。例如,如果存在标识符,则将调用update(),否则将调用save()

它的我的假设基于您的问题,如果这不是问题,那么请发布您的完整代码。

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

您的ID每次都在更改给定的员工,这导致了许多插入。

+0

是的,现在如何解决它。我可以删除身份证吗? – Java