2008-11-20 7 views
1

J'ai deux tables que je veux mapper aux classes. Les tableaux ressemblent à ceci:Rejoindre des classes NHibernate qui partagent une colonne commune mais pas de clé étrangère

Asset 
--------- 
AssetId 
AssetName 

Product 
--------- 
ProductId 
ProductName 
AssetId 

Disposal 
--------- 
DisposalId 
AssetId 
DisposalDate 

Au fond ce que je veux faire est de se joindre à la table des produits à la table d'élimination sur assetId pour que mon produit a une collection Aliénations rejoint par actifs. J'ai défini le mappage suivant mais NHibernate (1.2) semble ignorer la colonne clé définie dans le sac et choisit de joindre la table Product à la table Disposal par ProductId (ie Product.ProductId = Disposal.AssetId). Je ne suis pas sûr que ce soit un bug ou si je ne le définis pas correctement, mais si quelqu'un a un moyen de le faire, je serais très reconnaissant.

<class name="Product" table="Product" lazy="false"> 
    <id name="ProductId" column="ProductId" type="int"> 
     <generator class="native" /> 
    </id> 
    <property name="ProductName" column="ProductName"/> 
    <bag name="Disposals" fetch="join" > 
     <key column="AssetId" foreign-key="AssetId/> 
     <many-to-many class="Disposal"/> 
    </bag> 
    </class> 

Répondre

0

La manière propre:

<class name="Product" table="Product" lazy="false"> 
    <id name="ProductId" column="ProductId" type="int"> 
     <generator class="native" /> 
    </id> 
    <property name="ProductName" column="ProductName"/> 
    <many-to-one name name="Asset" class="Asset" column="AssetId" /> 
    </class> 

    <class name="Asset"> 
    <id name="AssetId" > 
     <generator class="native" /> 
    </id> 
    <property name="AssetName" /> 
    <bag name="Disposals"> 
     <key column="AssetId" /> 
     <many-to-many class="Disposal" /> 
    </bag> 
    </class> 

-clé étrangère est utilisée pour DDL, je pense qu'il est le nom de la contrainte de clé étrangère générée par l'exportation de schéma.

Vous pouvez bien-ref, pas complètement sûr si cela fonctionne:

<class name="Product" table="Product" lazy="false"> 
    <id name="ProductId" column="ProductId" type="int"> 
     <generator class="native" /> 
    </id> 
    <property name="ProductName" column="ProductName"/> 
    <property name="AssetId" /> 
    <bag name="Disposals" fetch="join" > 
     <key column="AssetId" property-ref="AssetId/> 
     <one-to-many class="Disposal"/> 
    </bag> 
    </class> 
1

Avez-vous mappé vos produits aux produits?

Votre schéma ne concerne pas uniquement l'élimination d'un produit. Une disposition ne peut concerner qu'un actif et non un produit. Votre schéma me dit qu'un actif a beaucoup de produits, et qu'un bien a beaucoup de cessions. Il n'y a rien qui indique qu'une disposition est pour un produit particulier.

Questions connexes