假设我有一个resolution,其中包含ArrayList个对象的refund个集合,且整数为amount

最终结果是我想在不使用HQL的情况下,根据resolutionrefund的总和搜索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

08-07 06:44