2010-03-23 5 views
1

J'essaie d'implémenter une relation un-à-plusieurs à l'aide de NHibernate 2.1.2, mais je continue d'obtenir des exceptions de type "Références d'associations non mappées". J'ai vérifié que mes fichiers hbm.xml sont des ressources incorporées. Voici mes classes et mappings. Des idées?Exception de classe non mappée NHibernate

public class OrderStatus 
{ 
    public virtual decimal MainCommit { get; set; } 
    public virtual decimal CommitNumber { get; set; } 
    public virtual string InvoiceNumber { get; set; } 
    public virtual string ShipTo { get; set; } 
    public virtual string CustomerOrderNumber { get; set; } 
    public virtual string Station { get; set; } 
    public virtual DateTime RequestedShipDate { get; set; } 
    public virtual decimal EstimatedValue { get; set; } 
    public virtual decimal EstimatedWeight { get; set; } 
    public virtual string Customer { get; set; } 
    public virtual DateTime InvoiceDate { get; set; } 
    public virtual ICollection<Promise> Promises { get; set; } 
} 

<class name="AladdinDb.Models.OrderStatus, AladdinDb" table="vorder_status"> 
    <id name="CommitNumber" type="decimal" column="commit_no"> 
     <generator class="assigned"> 
      <param name="property"> 
       Plan 
      </param> 
     </generator> 
    </id> 
    <property name="MainCommit" column="main_commit" type="decimal" /> 
    <property name="InvoiceNumber" column="invoice_no" type="string" /> 
    <property name="ShipTo" column="ship_to" type ="string"/> 
    <property name="CustomerOrderNumber" column="cust_order_no" type="string" /> 
    <property name="Station" column="station" type="string" /> 
    <property name="RequestedShipDate" column="req_ship_date" type="DateTime" /> 
    <property name="EstimatedValue" column="estimated_value" type="decimal"/> 
    <property name="EstimatedWeight" column="estimated_weight" type="decimal" /> 
    <property name="Customer" column="customer" type="string" /> 
    <property name="InvoiceDate" column="invoice_date" /> 
    <set name="Promises"> 
     <key column="commit_no"></key> 
     <one-to-many class="Promise" /> 
    </set> 
</class> 

public class Promise 
{ 
    public virtual decimal CommitNumber { get; set; } 
    public virtual DateTime PromiseDate { get; set; } 
    public virtual string WhoAsked { get; set; } 
    public virtual string WhoGave { get; set; } 
    public virtual string Iffy { get; set; } 
} 

<class name="AladdinDb.Models.Promise, AladdinDb" table="promise"> 
    <id name="CommitNumber" type="decimal" column="commit_no"> 
     <generator class="assigned" /> 
    </id> 
    <property name="PromiseDate" column="promise_date" /> 
    <property name="WhoAsked" column="who_asked" /> 
    <property name="WhoGave" column="who_gave" /> 
    <property name="Iffy" column="iffy" /> 
</class> 

Répondre

3

Vous devez utiliser le nom de classe complet dans l'association, tout comme dans les mappages de classe.

Utilisez les attributs assembly et namespace sur l'élément hibernate-mapping si vous souhaitez utiliser des noms de classe non qualifiés.

<set name="Promises"> 
    <key column="commit_no" /> 
    <one-to-many class="AladdinDb.Models.Promise, AladdinDb" /> 
</set> 
+0

Grrr. J'avais essayé "pleinement qualifié" mais j'ai omis les modèles. À un moment donné, je suppose que je vais faire des erreurs de débutant. Merci!! –

1

En OrderStatus dans la classe

public virtual Promise Promise{ get; set; } 

dans la cartographie

<many-to-one name="Promise" fetch="join" column="Promise" /> 

rien dans la classe Promise ou la cartographie à ce sujet.

+0

Il me semble que cette réponse inverse ma relation. Il peut y avoir 0 ou plusieurs lignes Promise pour un seul OrderStatus. –

Questions connexes