Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多次保存记录_Java_Hibernate - Fatal编程技术网

Java 多次保存记录

Java 多次保存记录,java,hibernate,Java,Hibernate,我正在尝试将记录保存到数据库中,保存成功,但当我单击“保存”按钮时,每次记录都保存到表中。我是说一张唱片保存了好几次 public void saveEmployeeDetails(Employee employeeDetails){ try{ System.out.println("----saveEmployeeDetails----"); getSession().saveOrUpdate(employeeDetails);

我正在尝试将记录保存到数据库中,保存成功,但当我单击“保存”按钮时,每次记录都保存到表中。我是说一张唱片保存了好几次

 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使用实体的
id
作为对象等式。在您的情况下,相同的对象被保存,但id不同。如果您想防止数据库中重复输入您的问题。请覆盖
equals()
hashcode()
方法。这里使用的是
saveUpdate()
,因此它根据标识符是否存在调用
save()
update()
。e、 g如果标识符存在,将调用update(),否则将调用
save()


这是我根据您的问题做出的假设。如果这不是问题所在,请发布您的完整代码。

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


对于给定的员工,您的id每次都在更改,这会导致多次插入。

您是否可以共享您的员工类,看起来它的主键在每次保存时都会更改。您的问题不清楚,无法提供答案。请在数据库中使用相同的id阅读显示您的交易代码