Ordering by formula fields in NHibernate

Posted by Darin Dimitrov on Stack Overflow See other posts from Stack Overflow or by Darin Dimitrov
Published on 2010-06-03T18:39:53Z Indexed on 2010/06/03 18:44 UTC
Read the original article Hit count: 297

Filed under:
|

Suppose that I have the following mapping with a formula property:

<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>

I would like to get all planets and order them by the Distance calculated property:

var planets = session
    .CreateCriteria<Planet>()
    .AddOrder(Order.Asc("Distance"))
    .List<Planet>();

This is translated to the following query:

SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY somefunc()

Desired query:

SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY formula0

If I set a projection with an alias it works fine:

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

but it populates only the Distance property in the result and I really like to avoid projecting manually over all the other properties of my object (there could be many other properties).

Is this achievable with NHibernate? As a bonus I would like to pass parameters to the native somefunc() SQL function. Anything producing the desired SQL is acceptable (replacing the formula field with subselects, etc...), the important thing is to have the calculated Distance property in the resulting object and order by this distance inside SQL.

© Stack Overflow or respective owner

Related posts about .NET

Related posts about nhibernate