This is more of a question than a problem. I have a common_code table that I have a parent_id field on which is recursive to the table. NHibernate does not seem to put criteria for my children objects. I guess what I'm asking for is if NHibernate allows me to have Polymorphic relationships. Basically ParentId relates to different derivatives of CommonCode based on which class you are starting from.
Hibernate version:2.0.0.3001
Tables
CREATE TABLE common_code
(
common_code_id INT NOT NULL IDENTITY PRIMARY KEY,
common_code_type_id INT NOT NULL REFERENCES common_code_type(common_code_type_id),
parent_id INT NULL REFERENCES common_code(common_code_id),
common_code_name VARCHAR(100) NOT NULL,
commmon_code_descr VARCHAR(100) NULL,
common_code_value VARCHAR(100) NULL
)
GO
Mapping documents:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="CompanyName.Portal.Domain.CommonCode,CompanyName.Portal.Domain" table="common_code" lazy="true">
<!-- Common Properties Accross CommonCode -->
<id name="Id" column="common_code_id" type="int">
<generator class="native" />
</id>
<discriminator column="common_code_type_id" />
<property name="Name" column="common_code_name" type="string" not-null="true" />
<!--
*************** Concrete Implementations of CommonCode ****************
-->
<!-- App class -->
<subclass name="CompanyName.Portal.Domain.App, CompanyName.Portal.Domain" discriminator-value="4">
<property name="Description" column="commmon_code_descr" type="string" not-null="true" />
<property name="RelativePath" column="common_code_value" type="string" not-null="true" />
<bag name="Features" inverse="true" lazy="true" cascade="delete">
<key column="parent_id" />
<one-to-many class="CompanyName.Portal.Domain.AppFeature,CompanyName.Portal.Domain" />
</bag>
</subclass>
<!-- AppFeature -->
<subclass name="CompanyName.Portal.Domain.AppFeature, CompanyName.Portal.Domain" discriminator-value="5">
<many-to-one name="Application" column="parent_id" cascade="save-update" not-null="true" />
<property name="Description" column="commmon_code_descr" type="string" not-null="true" />
<property name="RelativePath" column="common_code_value" type="string" not-null="true" />
<bag name="AppRoleFeatureAccess" inverse="true" lazy="true" cascade="delete">
<key column="app_feature_id" />
<one-to-many class="CompanyName.Portal.Domain.AppRoleFeatureAccess,CompanyName.Portal.Domain" />
</bag>
</subclass>
<!-- AppRole -->
<subclass name="CompanyName.Portal.Domain.AppRole, CompanyName.Portal.Domain" discriminator-value="6">
<many-to-one name="Application" column="parent_id" cascade="save-update" not-null="true" />
<property name="Description" column="commmon_code_descr" type="string" not-null="true" />
<bag name="FeatureAccess" inverse="true" lazy="true" cascade="delete">
<key column="app_role_id" />
<one-to-many class="CompanyName.Portal.Domain.AppRoleFeatureAccess,CompanyName.Portal.Domain" />
</bag>
<bag name="RoleMembers" inverse="true" lazy="true" cascade="delete">
<key column="app_role_id" />
<one-to-many class="CompanyName.Portal.Domain.AppRoleMember,CompanyName.Portal.Domain" />
</bag>
</subclass>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
Full stack trace of any exception that occurs: No exceptions
Name and version of the database you are using: SQL Server 2005
The generated SQL (show_sql=true):
2008-09-25 14:33:57,294 [5] INFO NHibernate.Loader.Loader [(null)] - SELECT this_.common_code_id as common1_4_0_, this_.common_code_name as common3_4_0_, this_.commmon_code_descr as commmon4_4_0_, this_.common_code_value as common5_4_0_ FROM common_code this_ WHERE this_.common_code_type_id='4'
2008-09-25 14:33:57,294 [5] INFO NHibernate.Loader.Loader [(null)] - SELECT features0_.parent_id as parent6_1_, features0_.common_code_id as common1_1_, features0_.common_code_id as common1_4_0_, features0_.common_code_name as common3_4_0_, features0_.parent_id as parent6_4_0_, features0_.commmon_code_descr as commmon4_4_0_, features0_.common_code_value as common5_4_0_ FROM common_code features0_ WHERE features0_.parent_id=@p0
2008-09-25 14:33:57,294 [5] INFO NHibernate.Loader.Loader [(null)] - SELECT features0_.parent_id as parent6_1_, features0_.common_code_id as common1_1_, features0_.common_code_id as common1_4_0_, features0_.common_code_name as common3_4_0_, features0_.parent_id as parent6_4_0_, features0_.commmon_code_descr as commmon4_4_0_, features0_.common_code_value as common5_4_0_ FROM common_code features0_ WHERE features0_.parent_id=@p0
|