2017-04-11 6 views
0

現在、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> 

答えて

0

あなたはMerchantServiceEntiを使用している、ので、 MerchantInfoクラスのリファレンス。私が知る限り、分離されたエンティティを保存しようとすると、管理状態にないため、MerchantServiceEntity参照変数に変更があるかどうかがhibernateによって認識されません。したがって、代わりに、彼はこの場合にプロパティを更新しようとします。

+0

私は、ここでの問題はコンポジットキーと思われます。一方のキー(MID)が親テーブル(シーケンス)から更新される外部キーであり、他方のキー(SERVICE_CODE)を手動で割り当てる必要がある。だから、私はそのキーを割り当てているとき、休止状態は、利用可能なキーと更新ステートメントを生成すると考えています。 – jAnA

関連する問題