2009-10-01 7 views
0

Quand devriez-vous utiliser l'élément class de l'ID composite?comment utiliser l'élément de classe composite-id?

par exemple, considèrent cet extrait:

<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> 
    .... 

par exemple, quel est le but de OrderLineId ci-dessus? Quelle est la relation avec d'autres pièces?

+0

Votre question. Je ne le comprends pas. –

Répondre

1

La réponse courte est « vous ne devriez pas » :-)

Il est généralement une bonne idée d'utiliser une clé de substitution en premier lieu; De plus, vous simplifieriez beaucoup vos mappages en utilisant un identifiant unique plutôt qu'un composite. Cela dit, il existe des situations (comme la cartographie des schémas hérités) lorsque vous devez utiliser une clé composite.

L'exemple ci-dessus montre comment mapper une clé composite en tant que composant. C'est une meilleure approche que d'utiliser l'entité elle-même comme sa propre clé, ce qui est ce qui se passerait si vous deviez la mapper sans l'attribut class sur <composite-id>. Les principales différences sont les suivantes:

  1. Lors du mappage clé composite en tant que composant, vous écrirons une nouvelle classe (OrderLineId) qui contiendraient cartographié des éléments clés individuels (lineId, orderId, customerId) en tant que propriétés. Lorsque vous mappez la clé composite sur l'entité elle-même, votre classe d'entité (OrderLine) doit contenir ces propriétés.
  2. Afin de charger OrderLine en utilisant le mappage "clé en tant que composant", vous allez créer une nouvelle instance de OrderLineId et la passer à session.get() comme clé. En utilisant le mappage "clé sur l'entité", vous devrez créer une instance de OrderLine pour charger OrderLine, ce qui est confus au mieux et présente au pire des problèmes d'intégrité des données.
Questions connexes