Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NHibernate Discussion :

[NHibernate]Propriété Many-to-one et composite-id


Sujet :

NHibernate

  1. #1
    Membre actif
    [NHibernate]Propriété Many-to-one et composite-id
    Bonjour,

    Je ne comprends comment fait NHibernate pour mapper une propriété many-to-one à l'une des colonnes faisant partir d'une clé composite-id.
    J'ai une table EMPLOYEE dont la clé est une clé composite

    EMPLOYEE(SITE, IDEMPLOYEE, NAME)

    J'ai une table TASK dont la clé est aussi une clé composite et dont l'une des colonnes (CREATOR_BY) est l'ID de l'employé.

    TASK(SITE,IDTASK,CREATOR_BY)

    J'ai donc défini les classes Employee et Task de la manière suivante:

    Code c# :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Employee
    {
     public virtual string SITE {get; set;}
     public virtual string IDEMPLOYEE {get; set;}
     public virtual string NAME{get; set;}
    }
     
    public class Task
    {
     public virtual string SITE {get; set;}
     public virtual string IDTASK{get; set;}
     public virtual Employee CREATOR_BY{get; set;}
    }


    J'ai défini le mapping de Employee et Task comme suit:

    Code xml :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <class name="Employee" table="EMPLOYEE" lazy="true">
        <composite-id>
          <key-property name="SITE" type="System.String"/>
          <key-property name="IDEMPLOYEE" type="System.String"/>
        </composite-id>    
        <property name="NAME" type="System.String/>
    </class>
     
    <class name="Task" table="TASK" lazy="true">
        <composite-id>
          <key-property name="SITE" type="System.String"/>
          <key-property name="IDTASK" type="System.String"/>
        </composite-id>    
        <many-to-one name="CREATOR_BY" class="Employee" lazy="false">
          <column name="SITE"/>
          <column name="CREATOR_BY"/>
        </many-to-one>
    </class>


    Ca fonctionne plutôt bien. Le hic, c'est que je ne comprends pas trop comment fait NHibernate.
    En effet, comment fait-il pour savoir que CREATOR_BY correspond à la colonne IDEMPLOYEE de la classe Employee ?

    Merci d'avance,
    Zoax

  2. #2
    Membre actif
    Bonsoir,

    en réalité mon mapping many-to-one n'est pas correct.
    Ca fonctionne avec un select mais pas avec un insert.
    De ce fait, pourriez-vous me dire svp comment je dois définir le mapping many-to-one pour la propriété CREATOR_BY ?

    Merci d'avance,
    Zoax

  3. #3
    Membre actif
    Bonsoir,

    j'ai trouvé une solution qui fonctionne mais que je ne comprends pas trop:

    En réalité il fallait que je définisse avec l'attribut many-to-one la colonne constituant la clé primaire composite avec l'attribut formula comme ceci:

    Code xml :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <many-to-one name="CREATOR_BY" class="Employee" lazy="false">
          <formula>SITE</formula>
          <column name="CREATOR_BY"/>
        </many-to-one>


    Pourriez-vous svp m'expliquer comment fait NHIbernate et ce qu'est l'attribut formula ?

    Merci d'avance,
    Zoax

###raw>template_hook.ano_emploi###