我目前正在进行一对多的hibernate xml映射。我想将记录插入两个表(MERCHANT_INFO,MERCHANT_SERVICE)。不更新条目。虽然我在daoImpl类中使用如下所示的保存,
getHibernateTemplate().save(objMerchantInfoEntity);
Hibernate生成的更新语句如下所示
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=?
我可以知道为什么最后两个语句将作为更新而不是插入?
一方 - > MERCHANT_INFO表主键:MID 多方 - > MERCHANT SERVICE表复合键: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>
答案 0 :(得分:0)
因为,您在MerchantInfo类上使用MerchantServiceEntity Reference。据我所知,当你尝试保存一个分离的实体时,hibernate不知道MerchantServiceEntity引用变量是否有任何变化,因为它不在托管状态。所以,他试图在这种情况下更新属性。