Hibernate - 汇总数据并将其转换为新实体的好方法

Jar*_*rek 0 java hibernate

我需要通过Hibernate对存储在数据库中的某些数据进行聚合,所以我想使用HQL来获取我需要的数据.

Transaction
    id
    userEmail
    moneyPaid
Run Code Online (Sandbox Code Playgroud)

现在..用userEmail确定的用户聚合所有moneyPaid的最佳方法是什么.我想找回将拥有用户电子邮件的实体,并使用聚合的moneyPayd属性.

这样做的最佳和最优雅的方法是什么?

可能如果我有另一个实体说用户:

User
    id
    email
    address
Run Code Online (Sandbox Code Playgroud)

是否有任何方便的方法不涉及加入User with Transaction的多个代码,聚合moneyPaid并返回完全不同类型的实体列表,如:

AggregatedData
    email
    totalMoneyPaid
    address
Run Code Online (Sandbox Code Playgroud)

我知道一些方法可以做到这一点,但它们都优雅而简洁,任何想法都值得赞赏.

Bas*_*lew 5

select u.email, sum(t.moneyPaid), u.address from Transaction t 
left join t.user u
group by u.email, u.address;
Run Code Online (Sandbox Code Playgroud)

我对这个查询没问题,如果你不想要一个List<Object[]>返回,你可以这样写:

select new org.sample.RequestResult(u.email, sum(t.moneyPaid), u.address) from Transaction t
left join t.user u
group by u.email, u.address;
Run Code Online (Sandbox Code Playgroud)

创建一个对象org.sample.RequestResult使用构造字符串电子邮件,龙(或者其他,你的实体的字段的类型)moneyPaid和字符串地址

查询将返回一个 List<RequestResult>

您可以只写select new map(...)一个从别名到选定值的Map返回