0
我目前正在研究一對多的hibernate xml映射。我想將記錄插入到兩個表(MERCHANT_INFO,MERCHANT_SERVICE)中。不更新條目。 eventhough我使用如下保存daoImpl類,一對多的hibernate xml映射與組合鍵生成更新語句,而不是插入
getHibernateTemplate().save(objMerchantInfoEntity);
休眠正在產生一些更新語句如下
Hibernate: insert into MERCHANT_INFO (MID,...) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update MERCHANT_SERVICE set TXN_MIN=?, TXN_MAX=?, POS_ID=?, STATUS=?, UPDATED_BY=? where SERVICE_CODE=? and MID=?
Hibernate: update MERCHANT_SERVICE set TXN_MIN=?, TXN_MAX=?, POS_ID=?, STATUS=?, UPDATED_BY=? where SERVICE_CODE=? and MID=?
可我知道爲什麼最後兩個語句來爲在更新,而不是插入?
ONE側 - > MERCHANT_INFO表的主鍵:MID 許多副 - >商戶服務表複合鍵:MID,SERVICE_CODE(MID是從MERCHANT_INFO表forign鍵)
在MerchantInfo.hbm.xml..
<set
name="merchantServices"
lazy="true"
inverse="true"
cascade="save-update"
>
<key>
<column name="MID" not-null="true" />
</key>
<one-to-many
class="com.en.common.entity.MerchantServiceEntity"
/>
</set>
在MerchantService.hbm.xml ..
<composite-id name="comp_id" class="com.en.common.entity.MerchantServicePK">
<key-property
name="serviceCode"
column="SERVICE_CODE"
type="java.lang.String"
length="32"
/>
<key-property
name="merchantId"
column="MID"
type="java.lang.Long"
length="38"
/>
</composite-id>
...
<!-- bi-directional many-to-one association to MerchantInfo -->
<many-to-one
name="MerchantInfoEntity"
class="com.en.common.entity.MerchantInfoEntity"
update="false"
insert="false"
>
<column name="MID" />
</many-to-one>
我懷疑這裏的問題是複合鍵。其中一個密鑰(MID)是從父表(序列)更新的外鍵,另一個密鑰(SERVICE_CODE)需要手動分配。所以當我分配這個鍵的時候,hibernate會認爲它是可用鍵並生成更新語句。 – jAnA