Hi,
I'm not able to save data using one-to-one mapping and not able to make out where am I going wrong.
This is my schema.
Emp
-----------------
EMPNO number <PK>
ENAME varchar(30)
------------------
Salary
------------------
EMPID <PK><FK>
BASIC NUMBER
HRA NUMBER
TAX NUMBER
-------------------
And my class and mapping files are as follows:
Salary.hbm.xml
-----------------------------------------------------------
<hibernate-mapping package="Formula">
<class name="Salary" table="EMP_SALARIES" >
<id name="id" column="EMPID">
<generator class="foreign">
<param name="property">emp</param>
</generator>
</id>
<property name="salary" column="BASIC"/>
<property name="hra" column="HRA"/>
<property name="tax" column="TAX"/>
<property name="income" formula="BASIC+HRA-TAX" />
<one-to-one name="emp" class="OneToManyRelationship.Emp" constrained="true"/>
</class>
</hibernate-mapping>
Emp.hbm.xml
-----------------------------------------------------------
<class name="Emp" table="EMP">
<id name="empno" column="EMPNO" unsaved-value="-1">
<generator class="increment"/>
</id>
<property name="ename" column="ENAME"/>
<one-to-one name="salaryDetails" class="Formula.Salary"/>
</class>
</hibernate-mapping>
and my
java file is
Emp emp=new Emp();
emp.setEname("Salaried Employee");
emp.setComm(new Integer(1));
emp.setDeptno(new Integer(10));
Salary sal=new Salary();
sal.setId(emp.getEmpno());
sal.setSalary(new Float("2322.34"));
sal.setHra(new Float(343.45));
sal.setTax(new Float(398.332));
emp.setSalaryDetails(sal);
session.save(emp);
When I try to run it, it insert record in Emp table only. On adding cascade="all" in one-to-one mapping of emp.hbm.xml file, an exception is thrown 'attempted to assign id from null one-to-one property: emp'.
Can you pls help me to resolve it ASAP.
Thanks,
Ruchika