I have been trying unsuccessfully to get a cascading insert to work with one to one mapping.
Error: The system always does an update on the child object.. I need it to create the object. I am obviously missing something on the foreign key
Hibernate: insert into TelcomNumber (formattedNumber, TelcomNumberId) values (?, ?)
Hibernate: update TelcomNumberGroup set areaCityCode=?, extension=?, internationalCountryCode=?, nationalNumber=?, subscriberNumber=? where TelcomNumberGroupId=?
Telephone extends TelcomNumber{
// sets type = TELEPHONE
}
Fax extends TelcomNumber{
// set type = FAX
}
TelcomNumber {
Long telcomNumberId;
String formattedNumber;
TelcomNumberGroup telcomNumberGroup;
String type;
}
TelcomNumberGroup{
String areaCode;
String subscriberCode;
String nationCode;
}
-------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class
name="com.test.poc.Telephone"
table="TelcomNumber"
dynamic-update="false"
dynamic-insert="false"
>
<id
name="id"
column="TelcomNumberId"
type="java.lang.Long"
>
<generator class="assigned"/>
</id>
<one-to-one name="telcomNumberGroup" class="com.test.poc.TelcomNumberGroup" cascade="all" constrained="true"/>
<property
name="formattedNumber"
type="java.lang.String"
update="true"
insert="true"
column="formattedNumber"
not-null="false"
/>
</class>
</hibernate-mapping>
----------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class
name="com.test.poc.TelcomNumberGroup"
table="TelcomNumberGroup"
dynamic-update="false"
dynamic-insert="false"
>
<id column="TelcomNumberGroupId" name="id" type="java.lang.Long">
<generator class="foreign">
<param name="property">Telephone</param>
</generator>
</id>
<!-- <one-to-one name="Telephone" class="com.test.poc.Telephone" constrained="true"/>
// Don't want it mapped back to telephone because it could actually be of type Fax, Telephone, Mobile etc etc.
The reason we are doing this is because there is a XML component where the xsd defines these types already.. even tho in theory they are exactly the same except for the type property which we will imply.
-->
<property
name="areaCityCode"
type="java.lang.String"
update="true"
insert="true"
column="areaCityCode"
/>
<property
name="extension"
type="java.lang.String"
update="true"
insert="true"
column="extension"
/>
<property
name="internationalCountryCode"
type="java.lang.String"
update="true"
insert="true"
column="internationalCountryCode"
/>
<property
name="nationalNumber"
type="java.lang.String"
update="true"
insert="true"
column="nationalNumber"
/>
<property
name="subscriberNumber"
type="java.lang.String"
update="true"
insert="true"
column="subscriberNumber"
not-null="true"
/>
</class>
</hibernate-mapping>
|