This group is for development OF NHibernate rather than development WITH NHibernate. Please report this on the NHUSERS group ( http://groups.google.com/group/nhusers/).
Steve Bohlen [email protected] http://blog.unhandled-exceptions.com http://twitter.com/sbohlen On Mon, Aug 8, 2011 at 1:06 PM, HappyNomad <[email protected]> wrote: > Taking a closer look at my HQL query, I realized it's checking if a > category's ID is in the Categories collection. So I tried to instead > project the Categories collection into a collection of IDs: > > "from Item i left join fetch o.Categories cats where :cid in (select > ID from elements(cats))" > > but that threw an exception: > > NHibernate.Hql.Ast.ANTLR.QuerySyntaxException occurred > Message=Exception of type 'Antlr.Runtime.MismatchedTokenException' > was thrown. near line 1, column 124 [from MyApp.DomainModel.Item i > left join fetch i.Categories cats where :cid in (select ID from > elements(cats))] > Source=NHibernate > QueryString=from MyApp.DomainModel.Item i left join fetch > i.Categories cats where :cid in (select ID from elements(cats)) > StackTrace: > at NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException() > at NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse() > at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Parse(Boolean > isFilter) > at > NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 > replacements, Boolean shallow, String collectionRole) > at > NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary`2 > replacements, Boolean shallow) > at NHibernate.Engine.Query.HQLQueryPlan..ctor(String hql, > String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, > ISessionFactoryImplementor factory) > at NHibernate.Engine.Query.HQLQueryPlan..ctor(String hql, > Boolean shallow, IDictionary`2 enabledFilters, > ISessionFactoryImplementor factory) > at > NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(String > queryString, Boolean shallow, IDictionary`2 enabledFilters) > at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(String > query, Boolean shallow) > at NHibernate.Impl.AbstractSessionImpl.CreateQuery(String > queryString) > > In any case, I hope that someone can give me some tips on writing this > HQL query. > > > On Aug 8, 12:39 pm, HappyNomad <[email protected]> wrote: > > I have a bidirectional many-to-many relationship between Category and > > Item. I'm trying to write an efficient query that, given a category's > > ID, will initialize all items belonging to that category as well as > > initialize each of those item's Categories collections. > > > > The HQL query I wrote is: > > "from Item i left join fetch i.Categories cats where :cid in > > elements(cats)" > > > > I'm no HQL expert, so I should first ask: does this query looks okay? > > > > In any case, the resulting SQL is rather funky: > > > > select * where @p0 in (select category2_.CategoryID from eft outer > > join Category_Item categories1_ on item0_.ID=categories1_.ItemID left > > outer join Category category2_ on > > categories1_.CategoryID=category2_.ID where > > > > For readability, I replaced some details in the SELECT clause with a > > star. I don't see what comes after the last "where" since Visual > > Studio's exception dialog box (I think) cut it off. Anyway, notice > > that "left" is even spelled as "eft". What happened here? >
