如何使用Hibernate/NHibernate内部连接派生表



(首先我想道歉,如果这是一个重复,我找不到任何好的解决方案,即使它必须是简单的)

我正在从销售数据创建报告,需要输出一些聚合值以及一些非聚合/非分组值,如Name。

这是我想输出的内容:

每个员工与User的总利润。名称和SUM(Order.Profit)如下:

Name         Profit [+ more aggregated columns]
-------------------
John Doe    | $250
James Smith | $130

这是相当简单的普通SQL:

SELECT 
u.Name,
x.TotalProfit
FROM dbo.Users u
INNER JOIN (
    SELECT  o.UserID as UserID, 
    SUM(o.Profit) AS TotalProfit,
    --[..] more aggregated columns
    FROM Orders o
    GROUP BY o.UserID
) x  ON u.ID = x.ProfitToID

我不想按u.Name分组,因为这会影响性能(详见sqlteam.com)

如何在NHibernate中做到这一点?

Hibernate中定义映射中的连接路径。因此,在Java中与其他类没有关联的类不能加入它们自己。Hibernate是有意义的ORM。

尝试创建SQLquery。与普通HQL查询的工作方式基本相同。

那么您将检索一个包含数据的数组。解析它,或者用合适的构造函数创建一个DTO

select a.b.MyDTO(u.Name, x.TotalProfit) from...
class MyDTO{
    String name;
    int totalProfit;
    public MyDTO(String name, int totalProfit) {
        // ...
    }
}

Udo .

如果您使用的是像这样的高级SQL,只需使用本机查询:

entityManager.createNativeQuery("your query here", SomeDTOClass.class);

最新更新