(首先我要道歉,如果这是重复的话,我找不到任何好的解决方案,即使它必须简单)
我正在根据销售数据创建报表,需要输出一些汇总值以及一些非聚合/非聚合值,例如Name。
这是我要输出的内容:
具有User.Name和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执行此操作?
答案 0 :(得分:1)
在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) {
// ...
}
}
乌
答案 1 :(得分:0)
如果您正在使用这种花哨的SQL,只需使用本机查询:
entityManager.createNativeQuery("your query here", SomeDTOClass.class);