Hi,
we have a table named Customer which has three sub classes / tables viz.
Cust1, Cust2 and Cust3 which are linked by hbm using joined-sub-class.

all the 4 tables have CustomerId as the primary Key. A record in customer
table will have one record either in Cust1 or Cust 2 or Cust3 table.

fetching the list using the standard Nhibernate List() fetches the classes
and its subclasses correctly.

However, in order to optimimize our query, w e had to use CreateSQlQuery
method.

On goolging, we found that the correct way to fetch class and its sub
classes is to
have a select query such as

var sqlQuery = Session.CreateSqlQuery(
select C.*,
case if C1.CustId is not null then 1
else if C2.CustId is not null then 2
....
from Customer C
left join Cust1 C1 on C1.CustId = C1.CustId
left join Cust2 C2 on C2.CustId

where C.CustID in (x,y,z,blah,blah).).

sqlQuery.AdddEntity("C",typeof(Customer));

sqlQuery.List();

the case and alais change is needed to differentiate the CUstId columns
between the 4 tables when the Nhibernate genereates a query internally, else
an error with *clazz* would be thrown..

On running the query, we get, the Nhibernate Exception as
"*IndexOutOfRangeException - Duration*"

Cust1 (child class) table has a column named Duration.
I renamed the table column to Duration_BE to check if the column name is an
Issue, ,
then it threw the error
"*IndexOutOfRangeException - Duration-BE*"


The reference for this mode of work is..
http://www.methodicmadness.com/2009/01/nhibernate-what-is-heck-clazz.html


Any pointers?

-- 
Regards,
Murali

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to