假设我有一个resolution
,其中包含ArrayList
个对象的refund
个集合,且整数为amount
。
最终结果是我想在不使用HQL的情况下,根据resolution
的refund
的总和搜索amount
。
目前,我正在通过总结笨拙的MySQL来做到这一点,但是它保持了规范化,我可以保证它是正确的。
我想到的一种方法是在refundTotal
中有一个resolution
,这将是数据库中的一个字段。我有一个专用的0参数设置器,它遍历refund
,求和amount
并在刷新发生时将其存储。该设置程序在数据库检索上运行,因此从数据库中出来时它是正确的。无论何时需要,吸气剂都能确保其正确性。
private setRefundTotal(){
ArrayList<Refund> refunds = getRefunds();
Integer refundTotalSum = 0;
for(refunds as Refund refund){
refundTotalSum+=refund.getAmount();
}
this.refundTotal = refundTotalSum;
}
public integer getRefundTotal(){
this.setRefundTotal();
return totalRefund;
}
但是,如果我孤立地
refund
更新resolution
,则必须获取并保存resolution
,以便refundTotal
保持一致。我确定这是休眠解决方案的一种非常常见的情况吗?
最佳答案
您可以考虑使用@Formula
代替退款的集合,如下所示:
@Formula(value = "select sum(t.amount) from User_Transaction t where t.abstractenvelope_id = id")
private Long total;
查看详情here