nhibernate和窗口函数
有没有办法让NHibernate使用窗口函数 具体来说,我希望创建如下查询:nhibernate和窗口函数,nhibernate,window-functions,Nhibernate,Window Functions,有没有办法让NHibernate使用窗口函数 具体来说,我希望创建如下查询: SELECT date, SUM(Price) OVER (ORDER BY date) FROM purchases GROUP BY date 我在网上搜索过,找不到任何关于窗口功能和NHibernate的信息 具体来说,我正在使用NHibernate的QueryOver接口 如果不可能,还有什么其他解决方案可以在我的代码中保持数据库的独立性?这是个好问题,但不幸的是,我在NHibernate本身中从未见
SELECT
date,
SUM(Price) OVER (ORDER BY date)
FROM purchases
GROUP BY date
我在网上搜索过,找不到任何关于窗口功能和NHibernate的信息
具体来说,我正在使用NHibernate的QueryOver接口
如果不可能,还有什么其他解决方案可以在我的代码中保持数据库的独立性?这是个好问题,但不幸的是,我在NHibernate本身中从未见过允许它生成这样一个窗口函数的代码 您唯一的选择是使用命名查询。在命名查询中,您可以手动键入SQL或调用存储过程 您声明希望保持解决方案数据库的独立性。我个人从来都不关心做这样的事情,因为我总是使用SQL Server,但我能理解您来自哪里。我听说有几个人使用内存中的SQLite解决方案运行集成测试,然后在SQL Server或Oracle上运行实际代码
在您的场景中,我认为您问题中的SQL无论如何都不符合ANSI标准,因此如果您使用命名查询使其独立于数据库,则必须以不同的方式重新编写它。据我所知,使用
QueryOver
API无法做到这一点
<>我将尽可能保持DB独立性,将窗口查询视为表和查询组之间的连接。然后编写一个查询器来引导这个连接
考虑到您的查询,它会导致这样的结果:(尽管示例似乎没有真正显示对窗口查询的需要)
您可能会为此使用一个视图。尽管您实际上是在将依赖项迁移到数据库模式,但这至少可以抽象掉一点
我最近也遇到了这种问题,我开始意识到我经常试图以一种与持久实体无关的方式使用NHibernate。如果我是Ayende Rahien,我可能知道该怎么做,但因为我不是,所以当我只需要诸如数据统计之类的只读聚合结果时,我通常会有点整洁地混合起来。它不应该是SUM(Price)OVER(PARTITION BY date)?对于SQL Server是的,但对于Postgres.thx不是,你应该将此添加到你的问题/标记中。这个问题是关于数据库独立性的,这就是为什么没有提到我使用的数据库。谢谢你的评论,但是,你也不能在QueryOver中加入子查询。
SELECT
purchases.date,
purchasesGroup.priceSum
FROM
purchases
INNER JOIN
(SELECT date, SUM(Price) as priceSum FROM purchases GROUP BY date)
AS purchasesGroup
on purchases.date = purchasesGroup.date