Sorry I don't understand. Map what in point 2? Are you suggesting that I place a 'view model' into my 'domain model'?
Do you suggest (see point 3) that I hit the database several times to count via the repository for ViewPublications? Thanks. On Sep 13, 12:41 pm, John Davidson <[email protected]> wrote: > The steps to do this are fairly simple, but I do not have the details of > your application or data model to provide you the exact code. > > 1. Create a view based on the RelationshipStatementPublications table. Call > it ViewRelationshipStatementPublications. > 2. Map it to a new class ViewPublications. Ensure the mapping is marked > mutable=false. > 3. Change your code for doing the count to now go against the repository for > ViewPublications. > > You really need to do this yourself so that you learn how to do it. > > John Davidson > > On Tue, Sep 13, 2011 at 3:26 AM, csetzkorn <[email protected]> wrote: > > Thanks. Could you please provide some more details for my situation > > (class code, [fnh] mapping). Thanks! > > > On Sep 12, 1:51 pm, John Davidson <[email protected]> wrote: > > > You need a new class with no joins to do what you want. No other way!! > > > > John Davidson > > > > On Mon, Sep 12, 2011 at 8:33 AM, csetzkorn <[email protected]> wrote: > > > > Sorry I still do not understand. This is my C# code: > > > > > return from oi in NHibernateSession.Current.Query<BlaInteraction>() > > > > select new BlaViewModel > > > > { > > > > ... > > > > > NoPublications = oi.Publications.Count(), > > > > > ... > > > > }; > > > > > I use Count() which means I do not need to populate the publications > > > > of oi. So the following ‘sub query’ (?) which is part of the select > > > > part of the generated sql (slightly adapted): > > > > > 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 > > > > > is far too complicated. The joins are just not necessary. Hence, > > > > something like this sub query: > > > > > select cast(count(*) as INT) from RelationshipStatementPublications > > > > publicatio21_ where publicatio21_.StatementId = 22762181 > > > > > would be enough. > > > > > Could you please elaborate on the separate read-only class? Thanks. > > > > > Christian > > > > > On Sep 12, 1:12 pm, John Davidson <[email protected]> wrote: > > > > > The big question is why does nhibernate think that it needs to join > > > > > statement just to count the publications and how can I prevent this? > > > > > > This is because you are telling it to always do the join so that you > > can > > > > > navigate the hierarchy. > > > > > > If you do not want to navigate the hierarchy for your connoting then > > you > > > > > need a separate class to do so that does not have the join mapped. It > > > > should > > > > > also be marked as readonly so that it does not interfere with your > > other > > > > > processes. > > > > > > John Davidson > > > > > > On Mon, Sep 12, 2011 at 7:29 AM, csetzkorn <[email protected]> > > wrote: > > > > > > Thanks for your reply. I am sorry but can you please elaborate on > > this > > > > > > as I do not understand? I have this inheritance structure: > > > > > > > Statement -> Publication > > > > > > > Statement->X > > > > > > > In statement I have an IList of Publication so that any Statement > > > > > > (e.g. X above) can be associated with a publication (obviously it > > > > > > wouldn’t necessarily make sense to associate a publication with > > > > > > another publication). > > > > > > > My fluent nhibernate mapping for statement is: > > > > > > > mapping.HasManyToMany(x => > > > > > > x.Publications).Table("RelationshipStatementPublications") > > > > > > > I have tried things like: > > > > > > > mapping.HasManyToMany(x => > > > x.Publications).Table("RelationshipStatementPublications").Fetch.Select().ExtraLazyLoad(); > > > > > > > but this did not change anything. > > > > > > > The big question is why does nhibernate think that it needs to join > > > > > > statement just to count the publications and how can I prevent > > this? > > > > > > IMHO it ‘thinks’ that it needs to populate the whole publication > > (i.e. > > > > > > join the parent: statement) ... > > > > > > > Thanks. > > > > > > > Christian > > > > > > > On Sep 9, 4:20 pm, John Davidson <[email protected]> wrote: > > > > > > > So your Publications class is mapped with a join to Statements. > > If > > > > you > > > > > > want > > > > > > > your query to not include that inner join then you need to create > > > > another > > > > > > > class, say RoPublications, that is set as read only and does not > > have > > > > the > > > > > > > join, then use that class for your count. > > > > > > > > John Davidson > > > > > > > > On Fri, Sep 9, 2011 at 10:51 AM, csetzkorn <[email protected] > > > > > wrote: > > > > > > > > Hi, > > > > > > > > > Thanks for the reply. I copy and paste the question on SA > > below. > > > > Not > > > > > > > > sure why it is incomplete - please let me know why. Thanks! > > > > > > > > > I am using this query: > > > > > > > > > return from oi in > > > > NHibernateSession.Current.Query<BlaInteraction>() > > > > > > > > select new BlaViewModel > > > > > > > > { > > > > > > > > ... > > > > > > > > > NoPublications = oi.Publications.Count(), > > > > > > > > > ... > > > > > > > > }; > > > > > > > > > BlaInteraction contains an IList of publications (i.e. > > entities). > > > > To > > > > > > > > determine the number of publications one does not really need > > to do > > > > > > > > all the joins for a publication. Can I prevent nhibernate from > > > > using > > > > > > > > joins in the generated sql (e.g. using projection???) somehow? > > > > > > > > > Thanks. > > > > > > > > > Christian > > > > > > > > > PS: > > > > > > > > > This is what NH produces (slightly adapted): > > > > > > > > > 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 > > > > > > > > > This is what would be sufficient: > > > > > > > > > select cast(count(*) as INT) from > > > > > > > > RelationshipStatementPublications publicatio21_ where > > > > > > > > publicatio21_.StatementId = 22762181 > > > > > > > > > On Sep 9, 2:24 pm, John Davidson <[email protected]> wrote: > > > > > > > > > If you really want an answer here please post the details in > > your > > > > > > message > > > > > > > > > rather than in StackOverflow. I checked StackOverflow and > > your > > > > query > > > > > > > > there > > > > > > > > > is incomplete. Please try again. > > > > > > > > > > John Davidson > > > > > > > > > > On Fri, Sep 9, 2011 at 9:01 AM, csetzkorn < > > [email protected]> > > > > > > wrote: > > > > > > > > > > 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. > > > > > -- > > > > 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.
