Skip to content

Component's Parent property is not accessible in queries #1583

Closed
@SlyNet

Description

@SlyNet

Having mapped list collection with composite-element its not possible to use parent property in query.
Domain:

	public class Parent
	{
		public virtual int ParentId { get; set; }
		public virtual IList<Child> Children { get; set; }
	}

	public class Child
	{
		public virtual Parent ParentLink { get; set; }
	}

Mapping:

mapper.Class<Parent>(rc => {
	rc.Id(x => x.ParentId, m => m.Generator(Generators.HighLow));
	rc.List(
		x => x.Children,
		listMap =>
		{
			listMap.Table("Children");
			listMap.Index(index => index.Column("Position"));

			listMap.Key(keyMap => { keyMap.Column(
				clm =>
				{
					clm.Name("ParentId");
				});
			});
			listMap.Lazy(CollectionLazy.Lazy);
			listMap.Cascade(Mapping.ByCode.Cascade.All | Mapping.ByCode.Cascade.All);
			listMap.Inverse(true);
		},
		rel => { rel.Component(cmp => { cmp.Parent(x => x.ParentLink); }); }
	);
});

query:

var result = (from p in session.Query<Parent>().SelectMany(x => x.Children)
	select p.ParentLink.ParentId).ToList();

Expected result: query returns list of ParentIds that have any Children
Actual result: query fails with exception

Hibernate.QueryException : could not resolve property: ParentLink of: component[] [.Select[NHibernate.Test.NHSpecificTest.GH1583.Child, NHibernate.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null,System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089](.SelectMany[NHibernate.Test.NHSpecificTest.GH1583.Parent, NHibernate.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null,NHibernate.Test.NHSpecificTest.GH1583.Child, NHibernate.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null](NHibernate.Linq.NhQueryable`1[NHibernate.Test.NHSpecificTest.GH1583.Parent], Quote((x, ) => (x.Children)), ), Quote((p, ) => (p.ParentLink.ParentId)), )]
   at NHibernate.Persister.Entity.AbstractPropertyMapping.ToType(String propertyName)
   at NHibernate.Hql.Ast.ANTLR.Tree.FromElementType.GetPropertyType(String propertyName, String propertyPath)
   at NHibernate.Hql.Ast.ANTLR.Tree.DotNode.GetDataType()
   at NHibernate.Hql.Ast.ANTLR.Tree.DotNode.Resolve(Boolean generateJoin, Boolean implicitJoin, String classAlias, IASTNode parent)
   at NHibernate.Hql.Ast.ANTLR.Tree.DotNode.ResolveFirstChild()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.propertyRefPath()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.propertyRef()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectExpr()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectExprList()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectClause()
   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(String collectionRole)
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 replacements, Boolean shallow, String collectionRole)
   at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters)
   at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow)
   at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression)
   at NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression expression, IQuery& query)
   at NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression)
   at NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression)
...

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions