+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre confirmé
    Inscrit en
    avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 346
    Points : 224
    Points
    224

    Par défaut [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# :
    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 :
    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 confirmé
    Inscrit en
    avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 346
    Points : 224
    Points
    224

    Par défaut

    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 confirmé
    Inscrit en
    avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 346
    Points : 224
    Points
    224

    Par défaut

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •