Hibernate 休眠一对一映射错误

Hibernate 休眠一对一映射错误,hibernate,key,shared,cascade,one-to-one,Hibernate,Key,Shared,Cascade,One To One,我正在使用共享主键的一对一映射 我的映射类似于- <class name="EmployeeDetails" table="EMPLOYEE_DETAILS" > <cache usage="nonstrict-read-write"/> <id name="employeeId" type="java.lang.Long"> <column name="EMPLOYEE_ID" precision="12" scale

我正在使用共享主键的一对一映射

我的映射类似于-

<class name="EmployeeDetails" table="EMPLOYEE_DETAILS" >
    <cache usage="nonstrict-read-write"/> 
    <id name="employeeId" type="java.lang.Long">
        <column name="EMPLOYEE_ID" precision="12" scale="0" />
        <generator class="foreign">
            <param name="property">employee</param>
        </generator>
    </id>
    <property name="score" type="java.math.BigDecimal" update="true">
        <column name="SCORE" />
    </property>
    <one-to-one name="employee" class="Employee" constrained="true"/>
</class>

雇员
在Employee.hbm.xml中

    <one-to-one name="employeeDetails" class="EmployeeDetails" cascade="all,delete-orphan"></one-to-one>

我刚刚设置了
employee.setEmployeeDetails(newemployeedetails(score))
并尽力拯救员工。
激发的查询是更新查询,但EMPLOYEE_DETAILS表中不存在任何记录。我希望它被插入。我怎样才能做到这一点?如果我使用cascade=“save update”,我不会得到任何错误。如果使用cascade=“save update”我将收到一个错误
不存在具有给定标识符的行

但这两次它都只触发更新查询。

我能够像下面这样解决这个问题-

        EmployeeDetails employeeDetails= employee.getEmployeeDetails();

        if(employeeDetails!= null){
            employeeDetails.setScore(statusVO.getScore());
        }
        else {
            employeeDetails = new EmployeeDetails(statusVO.getScore());
            employeeDetails.setEmployee(employee);
        }
        employeeDetailsService.saveOrUpdate(employeeDetails);
关键在于,当employeeDetails存在于db中(以及Employee对象中)时,只需更新属性,而当它不只是设置Employee对象时,hibernate将使用从Employee对象获取的正确id进行插入。

您可以尝试与