Hibernate:引用表中具有唯一主键的重复条目

时间:2014-03-04 06:37:15

标签: java sql hibernate

我有两个表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>

2 个答案:

答案 0 :(得分:0)

当没有SaveOrUpdate分配给您作为参数传递的对象时,

@ID将创建新实体。如果有@ID,它将执行合并操作。在你的情况下是ProjectID属性。

答案 1 :(得分:0)

Project pro = new Project();
pro.setPrj_Id(existingId);
emp.setProject(pro);