使用 SqlQuery 进行 NHibernate 投影

发布于 2024-08-20 05:34:44 字数 327 浏览 6 评论 0原文

我正在尝试重现 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枕花眠 2024-08-27 05:34:44

好吧....在查看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.

丿*梦醉红颜 2024-08-27 05:34:44

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

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

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

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

You could use the AddEntity method to fill entities from a SQL query.

Here are two examples from the NHibernate docs:

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

sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS")
    .AddEntity(typeof(Cat));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文