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进行插入。您可以尝试与