現在、1対多のhibernate xmlマッピングを行っています。レコードを2つのテーブル(MERCHANT_INFO、MERCHANT_SERVICE)に挿入したいとします。エントリを更新しないでください。本家の私は挿入キーの代わりにコンポジットキー生成更新ステートメントで1対多のhibernate xmlマッピング
getHibernateTemplate().save(objMerchantInfoEntity);
Hibernateは以下のようにいくつかのUPDATE文を生成している、daoImplクラスに以下のように保存し使用してい
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サービステーブル複合キー:MerchantInfo.hbm.xmlでMID、SERVICE_CODE(MIDはMERCHANT_INFOテーブルから外部キーである)
.. MerchantService.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>
..
<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)を手動で割り当てる必要がある。だから、私はそのキーを割り当てているとき、休止状態は、利用可能なキーと更新ステートメントを生成すると考えています。 – jAnA