(首先我想道歉,如果这是一个重复,我找不到任何好的解决方案,即使它必须是简单的)
我正在从销售数据创建报告,需要输出一些聚合值以及一些非聚合/非分组值,如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);