Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/nhibernate/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nhibernate和窗口函数_Nhibernate_Window Functions - Fatal编程技术网

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本身中从未见

有没有办法让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