2012-10-30 53 views
0

基本上,我有2個類別,其對應的表格T_P & T_M,它們以一對多的關係連接,一個P有一組女士這樣的東西:休眠不必要地更新已連接的表格

<class name="P" table="T_P"> 
    <set name="ms" cascade="all" lazy="false" inverse="true"> 
     <key column="P_ID" not-null="true" foreign-key="FK_M_P"/> 
     <one-to-many class="M"/> 
    </set> 
</class> 
<class name="M" table="T_M"> 
    <many-to-one name="p" column="P_ID" foreign-key="FK_M_P" class="P" 
       update="false" not-null="true" cascade="none"/> 
</class> 

現在,當我修改P和讓Hibernate來更新數據庫。很可能Hibernate會做一批更新,一個到T_P,一個到T_M,我知道後面的部分沒有必要,因爲我沒有改變那些女士。但是我想因爲我的對象被分離,所以hibernate必須更新一切。

所以我的問題是,在我的情況下,我可以讓Hibernate部分更新,而不是過多的數據庫命中?或者其他建議來優化這一點也值得讚賞。但這是一項遺留計劃,我可能無法做出重大改變。

回答

0

至於inverser="true"映射關注,它只會用於雙向關聯。 在您的配置,你有沒有在M.提到對於P映射

<class name="P" table="T_P"> 
<set name="ms" cascade="all" lazy="false" inverse="true"> 
    <key column="P_ID" not-null="true" foreign-key="FK_M_P"/> 
    <one-to-many class="M"/> 
</set> 
</class> 
<class name="M" table="T_M"> 
    /*mention mapping for P here, if you want to use inverse property properly*/ 
</class> 

問題可能是因爲cascade="all"映射。 嘗試設置cascade="save-update"進行映射以進行收集。

您經歷了以下link,其中包含父/子關係的簡單/基本示例。

親子關係的樣本映射如下。

/*parent contain set of child entity*/ 
<set name="children" inverse="true"> 
<key column="parent_id"/> 
<one-to-many class="Child"/> 
</set> 


/*child has reference of parent*/ 
<many-to-one name="parent" column="parent_id" not-null="true"/> 

我希望這可以幫助您解決問題。

+0

謝謝,你說得對,我忘了提及孩子的父母的參考。 –