2009-10-01 35 views
0

什麼時候應該使用composite-id的class元素?如何使用composite-id類元素?

例如,考慮這個片斷:

<composite-id name="id" ***class="OrderLineId"***> 
    <key-property name="lineId"/> 
    <key-property name="orderId"/> 
    <key-property name="customerId"/> 
</composite-id> 

<property name="name"/> 

<many-to-one name="order" class="Order" 
     insert="false" update="false"> 
    <column name="orderId"/> 
    <column name="customerId"/> 
</many-to-one> 
    .... 

例如,什麼是上面OrderLineId的目的是什麼? 它與其他部分有什麼關係?

+0

您的問題。 我不明白。 – 2009-10-01 13:56:57

回答

1

簡短的回答是:「你不應該」 :-)

它一般是用在首位代理鍵是個好主意;此外,通過使用單個ID而不是複合ID,您可以使映射更簡單。也就是說,當你需要使用複合鍵時,有些情況(如映射遺留模式)。

以上示例顯示如何將組合鍵映射到組件。這比使用實體本身作爲自己的密鑰更好,如果要在<composite-id>上沒有class屬性進行映射,會發生什麼情況。主要的區別是:

  1. 當映射覆合鍵組成部分,你會寫會包含映射個別關鍵零部件(lineIdorderIdcustomerId)作爲屬性的新類(OrderLineId)。當在實體本身上映射組合鍵時,實體類(OrderLine)必須包含這些屬性。
  2. 爲了使用「key as component」映射加載OrderLine,您將創建一個新實例OrderLineId並將其作爲密鑰傳遞給session.get()。使用「key on entity」映射,您將不得不創建一個OrderLine的實例來加載OrderLine,這最多隻會令人困惑,並且會在最差的情況下提出數據完整性問題。
相關問題