公式字段假設我有一個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