1

我正在尝试重现 HqlQuery 样式的“选择新的 ObjectToProjectOut”功能。即获取从查询返回的列列表,并作为 ObjectToProjectOut 类型的列表返回,这些类型使用构造函数实例化,其参数与查询中的列一样多。

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

有人知道我应该使用什么吗?

4

2 回答 2

2

好的....查看NHibernate代码后,我似乎在寻找AliasToBeanConstructorResultTransformer....当然!

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

解决方法是唯一别名。使用Hql,生成的sql有重度别名,所以这只是SqlQuery的一个bug。

呸呸呸。今天一定是我的一天,还发现了另一个我已发布到 StackOverflow 以征求意见的 nHibernate 错误/问题。

于 2010-02-04T16:09:13.930 回答
1

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

以下是NHibernate 文档中的两个示例:

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

sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS")
    .AddEntity(typeof(Cat));
于 2010-02-04T15:56:41.847 回答