Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
NHibernate 1.2 -2.0
I have database(see image)
Mapping documents:
Product
Code:
<class name="Product" table="Product">
<id name="Id" column="Id" type="System.Int32">
<generator class="increment"/>
</id>
...
</class>
Cons_ProductCode:
<joined-subclass name="Cons_Product" table="Cons_Product" extends="Product">
<key column="Id"/>
...
</joined-subclass>
PurchaseOrderCode:
<joined-subclass name="PurchaseOrder" table="PurchaseOrder" extends="WorkflowItem">
<key column="Id"/>
<set name="PurchaseItems" lazy="true" inverse="true" cascade="all" table="PurchaseItem">
<key column="PurchaseOrderId" />
<one-to-many class="PurchaseItem" />
</set>
...
</joined-subclass>
Cons_PurchaseOrderCode:
<joined-subclass name="Cons_PurchaseOrder" table="Cons_PurchaseOrder" extends="PurchaseOrder" >
<key column="Id"/>
...
</joined-subclass>
PurchaseItemCode:
<class name="PurchaseItem" table="PurchaseItem">
<id name="Id" column="Id" type="System.Int32">
<generator class="increment"/>
</id>
...
<many-to-one name="ProductIdObject" column="ProductId" not-null="true" />
</class>
Cons_PurchaseItemCode:
<joined-subclass name="Cons_PurchaseItem" table="Cons_PurchaseItem" extends="PurchaseItem">
<key column="Id"/>
...
</joined-subclass>
Name and version of the database you are using:MSSQL 2005
ClassesPurchaseOrderCode:
public class PurchaseOrder : WorkflowItem
{
...
private ISet<PurchaseItem> m_PurchaseItems = null;
[XmlIgnore()]
public virtual ISet<PurchaseItem> PurchaseItems
{
get
{
if (m_PurchaseItems == null)
m_PurchaseItems = new HashedSet<PurchaseItem>();
return m_PurchaseItems;
}
set { m_PurchaseItems = value; }
}
}
PurchaseItemCode:
public class PurchaseItem
{
...
private Product _productIdObject = null;
public virtual Product ProductIdObject
{
get { return _productIdObject; }
set { _productIdObject = value; }
}
}
ProblemWhen I try to execute folowing code
Code:
Cons_PurchaseOrder purchaseOrder = (Cons_PurchaseOrder)_poBlo.GetEntityById(typeof(Cons_PurchaseOrder), 2);
in field PurchaseItems of returned purchaseOrder I have entities typeof Cons_PurchaseItem, but in ProductIdObject I have entity typeof Product.
NHibernate by default use Implicit polymorphism and I wait that typeof object in this field should be Cons_Product(like in case with field PurchaseItems).
SQL query for field ProductIdObjectCode:
SELECT product0_.Id as Id4_0_, product0_.Description as Descript2_4_0_, product0_.Price as Price4_0_, product0_.ProductName as ProductN4_4_0_, product0_.Units as Units4_0_, product0_.CategoryId as CategoryId4_0_, product0_1_.ImageName as ImageName10_0_, case when product0_1_.Id is not null then 1 when product0_.Id is not null then 0 end as clazz_0_ FROM Product product0_ left outer join Cons_Product product0_1_ on product0_.Id=product0_1_.Id WHERE product0_.Id=@p0; @p0 = '8'
In according to this query NHibernate should use Cons_Product as base in process of proxy generation. But it using class Product.
What should I do to get Cons_Product without setting attribute "class" to Cons_Product in mapping for PurchaseItem? Is it a bug?