我有两个表Employee和Project
Table Employee
emp_id(PK- assigned) | emp_name | prj_id(FK prj_id of Project table)
Table Project
prj_id(PK- auto generated) | prj_name
我在Employee和Project
之间使用多对一关系问题:当我运行以下代码时:
Project pro = new Project();
emp.setProject(pro);
saveDetails(emp);
public void saveEmployeeDetails( final Employee emp)
{
try
{
this.hibernateTemplate.saveOrUpdate( emp);
}
catch (Exception exception)
{
logger.info( "Unable to save details", exception );
}
}
它正在更新表Employee和Project,但是在Project中它正在为已经存在的相同proj_name创建新条目。它正在更新表Employee的数据和。
因为Employee有自动生成的主键,所以每次保存新对象时我都会为Project创建新对象。如何避免重复输入,我对hibernate很新。我对它的了解非常少。
找到hbm文件
<class name="Employee"
table="employee">
<comment>store details of a project</comment>
<id name="employeeId" type="string">
<column length="45" name="emp_id" />
<generator class="assigned" />
</id>
<many-to-one cascade="save-update"
class="Project" fetch="select" lazy="false"
name="project">
<column name="prj_id" not-null="true" />
</many-to-one>
<class name="Project"
table="project">
<id name="projectId" type="int">
<column name="prj_id" />
<generator class="identity" />
</id>
<property generated="never" lazy="false" name="projectName"
type="java.lang.String">
<column name="prj_name" />
</property>
</class>
答案 0 :(得分:0)
SaveOrUpdate
分配给您作为参数传递的对象时, @ID
将创建新实体。如果有@ID
,它将执行合并操作。在你的情况下是ProjectID
属性。
答案 1 :(得分:0)
Project pro = new Project();
pro.setPrj_Id(existingId);
emp.setProject(pro);