使用 SqlQuery 进行 NHibernate 投影
我正在尝试重现 HqlQuery 风格的“选择新的 ObjectToProjectOut”功能。即获取从查询返回的列的列表,并作为 ObjectToProjectOut 类型的列表返回,这些类型是使用构造函数实例化的,该构造函数的参数与查询中的列一样多。
这实际上是“select new ObjectToProjectOut”在 Hql 中实现的效果......但显然这在 SqlQuery 中不可用。我想我需要设置一个结果转换并使用 PassThroughResultTransformer、DistinctRootEntityResultTransformer 等来使其工作。
有人知道我应该用什么吗?
I'm trying to reproduce the HqlQuery style 'select new ObjectToProjectOut' functionality. i.e. take a list of columns returned from a query and return as a list of ObjectToProjectOut types that are instantiated using a Constructor with as many parameters as the columns in the query.
This is in effect what 'select new ObjectToProjectOut' achieves in Hql.... but clearly that's not available in SqlQuery. I think I need to set a result transform and use either PassThroughResultTransformer, DistinctRootEntityResultTransformer etc to get it to work.
Anyone know what I should use ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
好吧....在查看NHibernate代码后,我似乎在寻找
AliasToBeanConstructorResultTransformer
....当然!不过我可能发现了一个 nHibernate 错误。如果您从两个不同的表(例如 market.name 和 account.name)返回两次相同的列名,那么当 nHibernate 将数组从数据库返回到转换器时,第一次出现的“Name”将用于两个都。可恶的。
解决方法是使用唯一的别名。使用 Hql,生成的 sql 存在大量别名,因此这只是 SqlQuery 的一个错误。
咕噜咕噜。今天一定是我的一天,还发现了另一个nHibernate我已将错误/问题发布到 StackOverflow 以征求评论。
ok.... after looking at the NHibernate code it seems that I was looking for
AliasToBeanConstructorResultTransformer
.... of course!However I may have found an nHibernate bug. If you have the same column name returned twice from two different tables (market.name and account.name, say) then by the time nHibernate returns the array from the db to the transformer, the first occurance of 'Name' will be used for both. Nasty.
Work around is to uniquely alias. With Hql, the sql generated is heavily aliased, so this is only a bug with SqlQuery.
Grrrr. Today must be my day, also found another nHibernate bug/issue I've posted to StackOverflow for comment.
您可以使用 AddEntity 方法来填充 SQL 查询中的实体。
以下是 NHibernate 文档 中的两个示例:
You could use the AddEntity method to fill entities from a SQL query.
Here are two examples from the NHibernate docs: