公式字段假设我有一个formula
特性以下映射:排序方式NHibernate的
<class name="Planet" table="planets">
<id name="Id" column="id">
<generator class="native" />
</id>
<!-- somefunc() is a native SQL function -->
<property name="Distance" formula="somefunc()" />
</class>
我想获得由Distance
计算财产所有行星,并命令他们:
var planets = session
.CreateCriteria<Planet>()
.AddOrder(Order.Asc("Distance"))
.List<Planet>();
这是翻译的以下查询:
SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY somefunc()
所需的查询:
SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY formula0
如果我设置的投影用别名,它工作正常:
var planets = session
.CreateCriteria<Planet>()
.SetProjection(Projections.Alias(Projections.Property("Distance"), "dist"))
.AddOrder(Order.Asc("dist"))
.List<Planet>();
SQL:
SELECT somefunc() as formula0 FROM planets ORDER BY formula0
,但它在结果只填充距离属性和我真的很想避免手动投影我的对象的所有其他属性(可能有很多其他属性)。
NHibernate可以实现吗?作为奖励,我希望将参数传递给本机的SQL函数somefunc()
。任何产生所需SQL的东西都是可以接受的(用子查询替换公式字段等),重要的是在结果对象中有计算出的距离属性,并按SQL中的这个距离排序。
我只是用突起......还是你需要实际的行星进一步操纵? – dotjoe 2010-06-04 14:20:34
是的,投影工作,但如果后来一个属性添加到对象,我将需要将其添加到预测也,如果我忘记它不会被分配。 – 2010-06-04 15:36:11