2010-03-23 2 views
1

Я пытаюсь реализовать отношения «один ко многим», используя NHibernate 2.1.2, но продолжаю получать исключения «Ссылки на ассоциации без ссылок». Я подтвердил, что мои файлы hbm.xml являются встроенными ресурсами. Вот мои классы и сопоставления. Есть идеи?NHibernate unmapped class exception

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> 

ответ

3

Вам необходимо использовать полное имя класса в ассоциации, так же как и в ваших сопоставлениях классов.

Используйте атрибуты и namespace на элементе hibernate-mapping, если вы хотите использовать неквалифицированные имена классов.

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

Grrr. Я попробовал «полностью квалифицированные», но оставил Модели. В какой-то момент, я полагаю, я полностью ошибаюсь. Благодаря!! –

1

В OrderStatus в классе

public virtual Promise Promise{ get; set; } 

в отображении

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

ничего в классе Promise или отображения об этом.

+0

Мне кажется, что этот ответ меняет мои отношения. Для одного OrderStatus может быть 0 или более строк Promise. –

Смежные вопросы