Thanks for the reply. "child of statement" - yes I meant “derives from statement”
I don't think having RelationshipStatementPublication as entity harms ... or does it? Or maybe that’s the whole problem see sql below? In terms of hydrating ... I said this because nhibernate seem to make all these unnecessary joins (to hydrate publications?) just for a count. Looking at the original sub query (part of the select statement): select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_, Publication publicatio22_ inner join Statements publicatio22_1_ on publicatio22_.StatementId=publicatio22_1_.DBId where publicatio21_.StatementId = 22762181 and publicatio21_.PublicationId=publicatio22_.StatementId it joins RelationshipStatementPublications to publication and so on (Publication also derives from statement by the way). This would be enough: select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_ where publicatio21_.StatementId = 22762181 On Sep 14, 12:11 pm, Gunnar Liljas <[email protected]> wrote: > When you say "child of statement", do you mean that it "derives from > statement"? > > The RelationshipStatementPublication class (in strict terms, not an entity) > seems unnecessary now. According to the mapping , it seems you are not using > it anyway. > > Whey you say hydrates, do you really mean that? The initial SQL query you > showed does not indicate any hydrating. > > /G > > 2011/9/14 csetzkorn <[email protected]> > > > Ok let me try to explain this again – maybe I was not very clear at > > the beginning. Sorry! > > > I have a class BlaInteraction which is a child of statement. Each > > statement has an IList<Publication>. This relationship is also part of > > the domain model to make it future proved: > > > public class RelationshipStatementPublication : Entity > > { > > public virtual Statement Statement { get; set; } > > public virtual Publication Publication { get; set; } > > } > > > In my statement mapping I have: > > > mapping.HasManyToMany(x => > > x.Publications).Table("RelationshipStatementPublications"); > > > My ‘naive’ approach to map a BlaInteraction to a viewmodel and count > > the number of publications for each BlaInteraction is this: > > return from oi in NHibernateSession.Current.Query<BlaInteraction>() > > select new BlaViewModel > > { > > ... > > NoPublications = oi.Publications.Count(), > > ... > > }; > > > This does not scale as hnibernate creates sql code that hydrates each > > publication of each (TOP n) BlaInteraction to JUST count the number of > > publications. This is what I would like to prevent as removing the > > ‘hydration joins’ by hand optimising the sql code scales things. > > > Please note that I do not want to use SQL as I am trying to use IQuery > > to make use of Telerik's 'Linq-based expression engine' which > > generates all the 'stuff' for filtering, paging and sorting. > > > Another recent (failed) attempt was this: > > > return from oi in NHibernateSession.Current.Query<BlaInteraction>() > > select new BlaViewModel > > { > > ... > > //NoPublications = > > NHibernateSession.Current.QueryOver<BlaInteraction>().Where(x => > > x.Statement.Id == > > oi.Id).Select(Projections.RowCount()).SingleOrDefault<int>(), > > NoPublications = NHibernateSession.Current.CreateSQLQuery("select > > count(distinct PublicationId) from > > dbo.RelationshipStatementPublications where StatementId > > = :StatementId").SetParameter("StatementId", > > oi.Id).UniqueResult<int>(), > > ... > > }; > > > The stuff commented out works but does not make sense. I tried this > > due to a recent SO comment. > > > Thanks. > > > Christian > > > On Sep 14, 11:08 am, Gunnar Liljas <[email protected]> wrote: > > > 1. The join is correct. You ask for the number of publications belonging > > to > > > a specific BlaInteraction. That is what the SQL expresses. > > > 2. Is it really important? > > > 3. If it is, add the interaction id as a readonly property on the > > > publication, and query on that. > > > > /G > > > > 2011/9/9 csetzkorn <[email protected]> > > > > > Hi experts, > > > > > Could you please be so kind and have a look at this: > > > > >http://stackoverflow.com/questions/7359783/prevent-unnecessary-cross-. > > .. > > > > > Thanks. > > > > > Christian > > > > > -- > > > > 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. > > > -- > > 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. > > -- 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.
