【发布时间】:2009-12-04 17:39:05
【问题描述】:
假设我创建了一个条件查询并使用 AliasToBean 结果转换器对其进行转换。
session.CreateCriteria<Staff>("s")
.CreateAlias("supervisor", "super")
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("s.name"), "name")
.Add(Projections.Property("super.name"), "supervisor_name"))
.SetResultTransformer(Transformers.AliasToBean<StaffView>());
如果只知道bean的属性名,是否可以添加限制?您可以使用 bean 属性名称 AddOrder,但 Restrictions 似乎仅适用于实际的属性名称。我猜这是因为它们是在转换之前应用的,就像您在 where 子句中不使用列别名但您可以按顺序一样。
//throws exception like cannot find property supervisor_name in Staff class
//only "super.name" works
.Add(Restrictions.Like("supervisor_name", "blah"))
//this works though
.AddOrder(Order.Asc("supervisor_name"))
所以基本上我需要一种方法来根据别名获取别名属性名称。我可以想到多种方法来做到这一点,但我希望 NHibernate 有一些现有的方法?例如,我可以将属性单独映射到别名,或者只映射到数据库视图,因此无需转换为 bean。
【问题讨论】:
标签: nhibernate criteria