Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > NHibernate
NHibernate Forum d'entraide sur l'utilisation du mappeur objet/relationnel NHibernate.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/11/2011, 21h19   #1
zoaax
Membre confirmé
 
Inscription : avril 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 346
Points : 200
Points : 200
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
zoaax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 01h15   #2
zoaax
Membre confirmé
 
Inscription : avril 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 346
Points : 200
Points : 200
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
zoaax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 19h23   #3
zoaax
Membre confirmé
 
Inscription : avril 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 346
Points : 200
Points : 200
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
zoaax est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h44.


 
 
 
 
Partenaires

Hébergement Web