我正在尝试在数据库中保存记录,保存成功但是当我点击保存按钮时,每次记录保存在表格中。我是指多次保存一条记录。
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
答案 0 :(得分:0)
Hibernate使用实体的id
作为Object equlaity。在你的情况下,相同的对象被保存,但是带有差异id.
如果你想防止数据库中的重复条目出现问题。请覆盖实体类中的equals()
和hashcode()
方法。在这里使用saveUpdate()
,因此根据标识符调用save()
或update()
或不。例如,如果存在标识符,则将调用update(),否则将调用save()
。
根据您的问题我的假设是否不是问题,请发布您的完整代码。
答案 1 :(得分:0)
从您的问题来看,您似乎应该将其作为主键。当您的数据模式没有任何业务密钥时,应使用代理键。 如果您这样做,那么对于给定的员工,hibernate将不会为给定的员工插入多个记录。
对于给定员工而言,您的ID每次都在变化,导致许多插入。