Ficheiro hbm.xml em vez de fazer INSERT faz UPDATE. PRECISO DE AJUDA URGENTE

Viva pessoal,

Preciso de uma ajudinha para perceber o que está acontecer com o meu insert na base de dados.

Estou a usar Hibernate para inserir dados em duas tabelas.
Tenho os seguintes ficheiros hbm.xml

<?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.retek.rpm.domain.promotion.bo.PromotionComponentDetailImpl" 
        table="RPM_PROMO_COMP_DETAIL" dynamic-update="true"
        persister="com.retek.rpm.domain.core.dao.RetekNormalizedEntityPersister">
        <composite-id name="objectId" class="com.retek.platform.bo.LongObjectId" access="field" 
            unsaved-value="any">
            <key-property name="value" column="RPM_PROMO_COMP_DETAIL_ID" type="long" 
                access="field"/>
        </composite-id>
        <many-to-one name="promotionComponent" 
            class="com.retek.rpm.domain.promotion.bo.PromotionComponentImpl" column="PROMO_COMP_ID" 
            not-null="true" access="field"/>
        <property name="displayId" column="PROMO_COMP_DETAIL_DISPLAY_ID" not-null="true" 
            type="string"/>
        <property name="ignoreConstraintHandling" column="IGNORE_CONSTRAINTS" 
            type="boolean"/>			
        <property name="promotionApplyCode" column="APPLY_TO_CODE" not-null="true" 
            type="com.retek.rpm.domain.promotion.dao.PromotionApplyCodeConverter"/>
        <property name="effectiveDateRange" access="field" 
            type="com.retek.rpm.domain.calendar.dao.DateRangeUserType">
            <column name="START_DATE"/>
            <column name="END_DATE"/>
        </property>
        <property name="createDate" not-null="true" column="CREATE_DATE" 
            type="com.retek.rpm.domain.calendar.dao.RDateType"/>
        <property name="createID" not-null="true" column="CREATE_ID" type="string"/>
        <property name="approvalDate" not-null="false" column="APPROVAL_DATE" 
            type="com.retek.rpm.domain.calendar.dao.RDateType"/>
        <property name="approvalID" not-null="false" column="APPROVAL_ID" type="string"/>
        <property name="stateCode" column="STATE" type="string"/>
        <joined-subclass 
            name="com.retek.rpm.domain.promotion.bo.PromotionComponentSimpleDetailImpl" 
            table="RPM_PROMO_COMP_SIMPLE" dynamic-update="true"
            persister="com.retek.rpm.domain.core.dao.RetekNormalizedEntityPersister">
            <key column="RPM_PROMO_COMP_DETAIL_ID"/>
            <property name="merchandiseNode" 
                type="com.retek.rpm.domain.promotion.dao.MerchandiseNodeUserType$All" 
                access="field">
                <column name="MERCH_TYPE" not-null="true"/>
                <column name="DEPT" not-null="false"/>
                <column name="CLASS" not-null="false"/>
                <column name="SUBCLASS" not-null="false"/>
                <column name="ITEM" not-null="false"/>
                <column name="DIFF_ID" not-null="false"/>
            </property>
            <property name="zoneGroupNode" 
                type="com.retek.rpm.domain.promotion.dao.ZoneGroupNodeUserType" access="field">
                <column name="ZONE_NODE_TYPE"/>
                <column name="ZONE_ID"/>
                <column name="LOCATION"/>
            </property>
            <property name="retailChangeValue" access="field" 
                type="com.retek.rpm.domain.promotion.dao.RetailChangeValueUserType">
                <column name="CHANGE_TYPE" not-null="true"/>
                <column name="CHANGE_AMOUNT" not-null="false"/>
                <column name="CHANGE_CURRENCY" not-null="false"/>
                <column name="CHANGE_PERCENT" not-null="false"/>
                <column name="CHANGE_SELLING_UOM" not-null="false"/>
                <column name="TSL_VOUCHER_NUMBER" not-null="false"/>
                <column name="TSL_VOUCHER_DESC" not-null="false"/>
            </property>
            <many-to-one name="priceGuide" column="PRICE_GUIDE_ID" 
                class="com.retek.rpm.domain.priceguide.bo.PriceGuideImpl" not-null="false" 
                access="field"/>
            <property name="attribute1" column="ATTRIBUTE_1" type="string" access="field"/>
            <property name="attribute2" column="ATTRIBUTE_2" type="string" access="field"/>
            <property name="attribute3" column="ATTRIBUTE_3" type="string" access="field"/>
            <many-to-one name="parentPromotionComponentDetail" 
                class="com.retek.rpm.domain.promotion.bo.PromotionComponentSimpleDetailImpl" 
                column="EXCEPTION_PARENT_ID" access="field"/>
        </joined-subclass>
        <joined-subclass 
            name="com.retek.rpm.domain.promotion.bo.PromotionComponentThresholdDetailImpl" 
            table="RPM_PROMO_COMP_THRESHOLD" dynamic-update="true"
            persister="com.retek.rpm.domain.core.dao.RetekNormalizedEntityPersister">
            <key column="RPM_PROMO_COMP_DETAIL_ID"/>
            <property name="merchandiseNode" 
                type="com.retek.rpm.domain.promotion.dao.MerchandiseNodeUserType$All" 
                access="field">
                <column name="MERCH_TYPE" not-null="true"/>
                <column name="DEPT" not-null="false"/>
                <column name="CLASS" not-null="false"/>
                <column name="SUBCLASS" not-null="false"/>
                <column name="ITEM" not-null="false"/>
                <column name="DIFF_ID" not-null="false"/>
            </property>
            <property name="zoneGroupNode" 
                type="com.retek.rpm.domain.promotion.dao.ZoneGroupNodeUserType" access="field" >
                <column name="ZONE_NODE_TYPE"/>
                <column name="ZONE_ID"/>
                <column name="LOCATION"/>
            </property>
            <many-to-one name="threshold" column="THRESHOLD_ID" 
                class="com.retek.rpm.domain.promotion.bo.ThresholdImpl" not-null="true" 
                access="field"/>
            <property name="attribute1" column="ATTRIBUTE_1" type="string" access="field"/>
            <property name="attribute2" column="ATTRIBUTE_2" type="string" access="field"/>
            <property name="attribute3" column="ATTRIBUTE_3" type="string" access="field"/>
            <property name="isExclusion" column="EXCLUSION" type="boolean" access="field"/>
            <many-to-one name="parentPromotionComponentDetail" 
                class="com.retek.rpm.domain.promotion.bo.PromotionComponentThresholdDetailImpl" 
                column="EXCEPTION_PARENT_ID" access="field"/>
        </joined-subclass>
        <joined-subclass 
            name="com.retek.rpm.domain.promotion.bo.PromotionComponentBuyGetDetailImpl" 
            table="RPM_PROMO_COMP_BUY_GET" dynamic-update="true"
            persister="com.retek.rpm.domain.core.dao.RetekNormalizedEntityPersister">
            <meta attribute="lazy-load-collection">zoneGroupNodes</meta>
            <key column="RPM_PROMO_COMP_DETAIL_ID"/>
            <property name="all" column="BUY_ITEM_TYPE" type="boolean" not-null="true"/>
            <property name="buyQuantity" column="BUY_ITEM_QTY" 
                type="com.retek.rpm.domain.promotion.dao.QuantityUserType" not-null="true"/>
            <property name="retailChangeValue" access="field" 
                type="com.retek.rpm.domain.promotion.dao.RetailChangeValueUserType">
                <column name="CHANGE_TYPE" not-null="true"/>
                <column name="CHANGE_AMOUNT" not-null="false"/>
                <column name="CHANGE_CURRENCY" not-null="false"/>
                <column name="CHANGE_PERCENT" not-null="false"/>
                <column name="CHANGE_SELLING_UOM" not-null="false"/>
                <column name="TSL_VOUCHER_NUMBER" not-null="false"/>
                <column name="TSL_VOUCHER_DESC" not-null="false"/>
            </property>
            <set name="buyItems" access="field" table="RPM_PROMO_BUY_ITEM" inverse="false" 
                lazy="true" cascade="none" persister="com.retek.rpm.domain.core.dao.RetekBasicCollectionPersister">
                <key column="RPM_PROMO_COMP_DETAIL_ID" foreign-key="RPM_PROMO_COMP_DETAIL_ID"/>
                <many-to-many class="com.retek.rpm.domain.core.bo.ItemImpl" column="ITEM"/>
            </set>
            <set name="getItems" access="field" table="RPM_PROMO_GET_ITEM" inverse="false" 
                lazy="true" cascade="none" persister="com.retek.rpm.domain.core.dao.RetekBasicCollectionPersister">
                <key column="RPM_PROMO_COMP_DETAIL_ID" foreign-key="RPM_PROMO_COMP_DETAIL_ID"/>
                <many-to-many class="com.retek.rpm.domain.core.bo.ItemImpl" column="ITEM"/>
            </set>
            <set name="zoneGroupNodes" access="field" table="RPM_PROMO_BUY_GET_ZONE" 
                inverse="false" lazy="false" cascade="none">
                <key column="RPM_PROMO_COMP_DETAIL_ID"/>
                <element type="com.retek.rpm.domain.promotion.dao.ZoneGroupNodeUserType">
                    <column name="ZONE_NODE_TYPE" sql-type="long"/>
                    <column name="ZONE_ID" sql-type="long"/>
                    <column name="LOCATION" sql-type="long"/>
                </element>
            </set>
            <set name="promotionComponentDetailLocationExclusions" cascade="save-update" 
                access="field" inverse="false" lazy="true">
                <key column="EXCLUSION_PARENT_ID"/>
                <one-to-many 
                    class="com.retek.rpm.domain.promotion.bo.PromotionComponentBuyGetDetailImpl"/>
            </set>
            <many-to-one name="parentPromotionComponentDetail" 
                class="com.retek.rpm.domain.promotion.bo.PromotionComponentBuyGetDetailImpl" 
                column="EXCLUSION_PARENT_ID" access="field"/>
        </joined-subclass>

        <!--Changes for Mod 93 

############################################################

                   APARTIR DAQUI É QUE INTERESSA VER QUAL O PROBLEMA - IGNORAR O QUE ESTÁ PARA CIMA 

############################################################
        -->

        

        <joined-subclass         	        	
            name="com.retek.rpm.domain.promotion.bo.TslPromotionComponentMultiBuyDetailImpl" 
            table="TSL_RPM_PROMO_COMP_M_B" dynamic-update="true"
            persister="com.retek.rpm.domain.core.dao.RetekNormalizedEntityPersister">
           	<meta attribute="lazy-load-collection">zoneGroupNodes</meta>
			<key column="RPM_PROMO_COMP_DETAIL_ID"/>
				        				        
            <property name="multiBuyPromotionType" column="MULTI_BUY_PROMO_TYPE" type="com.retek.rpm.domain.core.dao.codeconverter.TslMultiBuyTypeStringCodeConverter" not-null="true"/>
            <!-- coupon to be included -->
			
			
            <set name="listDetails" inverse="true" lazy="true" cascade="save-update">
				<key column="RPM_PROMO_COMP_DETAIL_ID" foreign-key="RPM_PROMO_COMP_DETAIL_ID"/> 
				<one-to-many class="com.retek.rpm.domain.promotion.bo.TslMultiBuyListImpl"/>
			</set>			
						
	</joined-subclass>
    </class>
</hibernate-mapping>

Este ficheiro hbm.xml tem um joined class que insere os dados certos na tabela que mapea mas dentro deste joined-class tenho um set que é uma collection que mapea uma outra tabela. Este set usa o ficheiro hbm.xml seguinte:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<!-- 
     modified by: Lakshmi Natarajan - LN,lakshmi.natarajan@in.tesco.com
     date: 26-April-2007 v1.0
     Mod ref: 365a
     Mod Description: Addition of new properties sTslBaseItem,bTslPriceMarkInd and bTslPrimPackInd corresponding to 
                      ITEM_MASTER.TSL_BASE_ITEM,ITEM_MASTER.TSL_PRICE_MARK_IND and ITEM_MASTER.TSL_PRIM_PACK_IND
-->
        
<hibernate-mapping>
	    <class name="com.retek.rpm.domain.promotion.bo.TslMultiBuyListImpl" table="TSL_RPM_PROMO_COMP_M_B_DTL">			

		    	<id name="id" type="long" column="LIST_ID" unsaved-value="null">
		          <generator class="sequence">
		                <param name="sequence">TSL_MULTI_BUY_LIST_ID_SEQ</param>
		          </generator>
		        </id>
		        <many-to-one name="tslPromotionComponentMultiBuyDetailImpl" class="com.retek.rpm.domain.promotion.bo.TslPromotionComponentMultiBuyDetailImpl" 
		      	column="RPM_PROMO_COMP_DETAIL_ID" not-null="true" access="field" />
		      				
		   	 	<!--property name="displayId" column="LIST_DISPLAY_ID" type="string" insert="false" update="false" access="field"/-->                              	
		        <property name="listTypes" column="LIST_TYPE"  type="com.retek.rpm.domain.core.dao.codeconverter.TslMultiBuyListTypeCodeConverter" insert="false" update="false" access="field"/>
				<property name="buyListType" column="BUY_ITEM_TYPE" type="com.retek.rpm.domain.core.dao.codeconverter.TslMultiBuyPromotionBuyTypeCodeConverter" insert="false" update="false" access="field"/>
				<property name="value" column="BUY_ITEM_VALUE" insert="false" update="false" access="field"/>
				<property name="retailChangeValue" access="field" 
					type="com.retek.rpm.domain.promotion.dao.RetailChangeValueUserType" insert="false" update="false">
					<column name="CHANGE_TYPE" not-null="false"/>
					<column name="CHANGE_AMOUNT" not-null="false"/>
					<column name="CHANGE_CURRENCY" not-null="false"/>
					<column name="CHANGE_PERCENT" not-null="false"/>
					<column name="CHANGE_SELLING_UOM" not-null="false"/>
					<column name="VOUCHER_NUMBER" not-null="false"/>
					<column name="VOUCHER_DESCRIPTION" not-null="false"/>
		        </property>
		      	<property name="lockVersion" column="LOCK_VERSION" not-null="false" insert="false" update="false" access="field"/>
		      	<property name="getQuantity" column="GET_QUANTITY" type="com.retek.rpm.domain.promotion.dao.QuantityUserType" not-null="false" insert="false" update="false" access="field"/>
			</class>			
</hibernate-mapping>

Estes mapeamentos não dão erro nenhum mas só insere na primeira tabela. O problema é que na primeira tabela ele faz um INSERT e na segunda tabela faz um UPDATE quando deveria fazer um INSERT também. Mostro as instruções SQL que ele faz em baixo.

insert into RPM_PROMO_COMP (COMP_DISPLAY_ID, NAME, CONSIGNMENT_RATE, STATE, SECONDARY_IND, PROMO_ID, DEAL_ID_ITEM, DEAL_DETAIL_ID_ITEM, 
DEAL_ID_LOCATION, DEAL_DETAIL_ID_LOCATION, FUNDING_PERCENT, BUY_GET_UPTAKE_PERCENT, PROMO_COMP_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

update TSL_RPM_PROMO_COMP_M_B_DTL set RPM_PROMO_COMP_DETAIL_ID=? where LIST_ID=?

A minha questão é:

Como é que forço a fazer o INSERT em vez do UPDATE?
Que tenho que alterar neste ficheiros para forçar o INSERT?

Muito Obrigado
Rui Félix

Pode ser o cascade que você colocou save-update, não tenho certeza, mas tenta mudar só pra save!