It seemed weird that *CreateCriteria<IFoo>()* always works, but
*CreateQuery("from
IFoo")* requires the use of <import> (and, strange enough, *CreateQuery("from
System.Object")* works always).That wasn't clear to me from the doc ( http://nhforge.org/doc/nh/en/index.html#queryhql-polymorphism), and after implementing what Germán suggested, I assumed it wasn't possible for the HQL parser to know what type I'm referring to if it's not declared, while Criteria gets the corresponding Type instance. Now, after seeing it all, it's a perfectly reasonable behavior. Only the docs should be more specific. How can I contribute to that? I feel like it's time to start giving back to NH :-) Diego On Wed, Nov 18, 2009 at 16:59, Fabio Maulo <[email protected]> wrote: > where is the news? I don't understand > http://nhforge.org/doc/nh/en/index.html#mapping-declaration-import > > 2009/11/18 Diego Mijelshon <[email protected]> > > Thanks Germán! >> That did the trick. >> >> Strange behavior in HQL, though. >> It has to be an implementation detail (i.e. not easy to "guess" the type >> if there are no references to it) >> Fabio, is that it? >> >> Diego >> >> >> >> On Wed, Nov 18, 2009 at 16:25, Germán Schuager <[email protected]>wrote: >> >>> http://blog.schuager.com/2008/12/polymorphic-query-using-interfaces.html >>> >>> On Wed, Nov 18, 2009 at 4:20 PM, Diego Mijelshon <[email protected] >>> > wrote: >>> >>>> According to the docs, querying on IFoo should return instances from all >>>> the types that implement IFoo, even if there's no reference to IFoo in the >>>> mappings. >>>> >>>> Here's what I'm trying to map: >>>> >>>> *public interface IFoo { int Foo { get; set; } }* >>>> *public class X : IFoo { public virtual int Foo { get; set; } }* >>>> *public class Y : IFoo { public virtual int Foo { get; set; } }* >>>> * >>>> * >>>> *<class name="X">* >>>> * **<id column="id" type="int">* >>>> * **<generator class="identity"/>* >>>> * **</id>* >>>> * **<property name="Foo"/>* >>>> *</class>* >>>> *<class name="Y">* >>>> * **<id column="id" type="int">* >>>> * **<generator class="identity"/>* >>>> * **</id>* >>>> * **<property name="Foo"/>* >>>> *</class>* >>>> >>>> But when I try to CreateQuery("from IFoo"), I get an exception: >>>> >>>> *Unhandled Exception: NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: >>>> IFoo is not mapped [from IFoo]* >>>> * at >>>> NHibernate.Hql.Ast.ANTLR.SessionFactoryHelperExtensions.RequireClassPersister(String >>>> name)* >>>> * at >>>> NHibernate.Hql.Ast.ANTLR.Tree.FromElementFactory.AddFromElement()* >>>> * at NHibernate.Hql.Ast.ANTLR.Tree.FromClause.AddFromElement(String >>>> path, IASTNode alias)* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.CreateFromElement(String >>>> path, IASTNode pathNode, IASTNode alias, IASTNode propertyFetch)* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElement()* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElementList()* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromClause()* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.unionedQuery()* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.query()* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectStatement()* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.statement()* >>>> * at NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate()* >>>> * at >>>> NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Analyze(HqlParseEngine parser, >>>> String collectionRole)* >>>> * 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.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)* >>>> >>>> What am I doing wrong? >>>> >>>> Diego >>>> >>>> -- >>>> 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]<nhusers%[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]<nhusers%[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]<nhusers%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> > > > > -- > Fabio Maulo > > -- > 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]<nhusers%[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.
