Chapter 11 Génération d'objets persistants .NET 2.0 et d'applications Windows


Correspondances d'identifiant primaire

La correspondance d'identifiant primaire est obligatoire dans NHibernate. Les identifiants primaires des classes d'entité sont mis en correspondance avec les clés primaires des tables principales dans les source de données. Si vous n'en définissez aucune, une correspondance d'identifiant primaire par défaut est générée, mais risque de ne pas fonctionner correctement.

Il existe trois types de correspondance d'identifiant primaire dans NHibernate:

Les classes mises en correspondance doivent déclarer la colonne de clé primaire de la table de base de données. La plupart des classes auront également une propriété qui contiendra l'identificateur unique d'une instance.

Correspondance d'identifiant simple

Si une clé primaire est attachée à une colonne unique, seul un attribut dans l'identifiant primaire peut être mis en correspondance. Ce type de clé primaire peut être généré automatiquement. Vous pouvez définir la classe de générateur ainsi que les paramètres. Il existe de nombreux types de classe de générateur tels que increment, identity, sequence, etc. Chaque type de classe de générateur peut avoir des paramètres qui lui sont propres. Pour plus d'informations, reportez-vous à votre documentation NHibernate.

Vous pouvez définir la classe de générateur et les paramètres dans l'onglet NHibernate de la feuille de propriétés d'un identifiant primaire. Les paramètres ont la forme suivante : param1=value1; param2=value2.


Steps Pour définir une correspondance d'identifiant :

  1. Afficher la feuille de propriétés de la classe, puis cliquez sur l'onglet Identifiants. Double-cliquez sur l'entrée appropriée pour afficher sa feuille de propriétés.
  2. Cliquez sur l'onglet NHibernate, sélectionnez une classe de générateur et définissez ses paramètres.

    Exemples de paramètres :

  3. Vous pouvez visualiser le code dans l'onglet Aperçu :


Notez que, s'il existe plusieurs attributs d'identifiant primaire, le générateur n'est p as utilisé.

Correspondance d'identifiant composite

Si une clé primaire inclut plusieurs colonnes, l'identifiant primaire peut avoir plusieurs attributs mis en correspondance avec ces colonnes. Dans certains cas, la colonne de clé primaire peut également être colonne de clé étrangère.


Dans l'exemple ci-dessus, la classe Assignment a un identifiant primaire doté de trois attributs : un attribut de base, et deux attributs migrés. La correspondance d'identifiant se présente comme suit :

<composite-id>
    < key-property name="Type" access="property">
        < column name="Type" sql-type="integer" 
				not-null="true"/>
    </key-property>
    <key-many-to-one name="title" access="property">
    </key-many-to-one>
    <key-many-to-one name="worker" access="property">
    </key-many-to-one>
</composite-id>

Correspondance d'identifiant primaire de composant

Pour plus de commodité, un identifiant composite peut être mis en oeuvre via une classe de type valeur séparée. L'identifiant primaire a juste un attribut ayant le type class. La classe séparée doit être définie comme classe de type valeur. La correspondance de classe de composant sera alors générée.


Dans l'exemple ci-dessous, trois attributs liés au nom sont groupés dans une classe distincte Name. Cette classe est mise en correspondance avec la même table que la classe Person. L'identifiant primaire généré se présente comme suit :

<composite-id name="name" class="identifier.Name">
    <key-property name="firstName">
        <column name="name_firstName"
            sql-type="text"/>
    </key-property>
    <key-property name="middleName">
        <column name="name_middleName" 
            sql-type="text"/>
    </key-property>
    <key-property name="lastName">
        <column name="name_lastName" 
            sql-type="text"/>
    </key-property>
</composite-id>

Remarque : La classe de type valeur doit réaliser l'interface java.io.Serializable interface, qui met en oeuvre les méthodes equals() et hashCode().

 


Copyright (C) 2007. Sybase Inc. All rights reserved.