使用SqlQuery的NHibernate Projection

时间:2010-02-04 12:37:26

标签: nhibernate projection sql

我正在尝试重现HqlQuery样式'select new ObjectToProjectOut'功能。即获取从查询返回的列的列表,并返回为使用构造函数实例化的ObjectToProjectOut类型的列表,其中参数的数量与查询中的列一样多。

这实际上是“选择新的ObjectToProjectOut”在Hql中实现的......但显然在SqlQuery中不可用。我想我需要设置一个结果转换并使用PassThroughResultTransformer,DistinctRootEntityResultTransformer等来使其工作。

任何人都知道我应该使用什么?

2 个答案:

答案 0 :(得分:2)

确定....在查看NHibernate代码后,似乎我正在寻找AliasToBeanConstructorResultTransformer ....当然!

但是我可能发现了一个nHibernate错误。如果从两个不同的表(例如market.name和account.name)返回两次相同的列名,那么当nHibernate将数组从db返回到变换器时,第一次出现的'Name'将用于都。讨厌。

解决方法是使用唯一别名。使用Hql,生成的sql是大量别名,所以这只是SqlQuery的一个错误。

GRRRR。今天必须是我的一天,也找到another nHibernate bug/issue I've posted to StackOverflow for comment.

答案 1 :(得分:1)

您可以使用AddEntity方法从SQL查询中填充实体。

以下是NHibernate docs中的两个示例:

sess.CreateSQLQuery("SELECT * FROM CATS")
    .AddEntity(typeof(Cat));

sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS")
    .AddEntity(typeof(Cat));