Java 休眠标准+;投影表中的计算 发票联

Java 休眠标准+;投影表中的计算 发票联,java,mysql,hibernate,Java,Mysql,Hibernate,iddescriptionrateamount 1Invoice A3.010.0 2邀请B4.020.0 3发票C5.030.0 使用投影列表,是否可以计算(金额*比率)并返回所有记录的总和 更新1: double dblAmount = 0.0; for(Invoice invoice : list){ dblAmount = dblAmount + (invoice.getRate() * invoice.getAmount()); } 使用Hibernate

iddescriptionrateamount
1Invoice A3.010.0
2邀请B4.020.0
3发票C5.030.0

使用投影列表,是否可以计算(金额*比率)并返回所有记录的总和

更新1:

   double dblAmount = 0.0;
   for(Invoice invoice : list){
     dblAmount = dblAmount + (invoice.getRate() * invoice.getAmount());
   }
使用Hibernate 4,我听说在不指定联接的情况下,使用这种方式(invoice.getSomething())会对性能产生影响?

double sum=0;
double sum=0;   
ProjectionList projList = new ProjectionList(); 
projList.add(Projections.property("rate"));
projList.add(Projections.property("amount"));
criteria.setProjection(projList);
List list=criteria.list();

for (Iterator it = list.iterator(); it.hasNext();) {
   double d=1;
   Object[] row = (Object[]) it.next(); 
   for (int i = 0; i < row.length; i++) { 
     d=d*Double.parseDouble(row[i].toString());
   } 
   sum=sum+d;
  }
return sum;
ProjectionList projList=新的ProjectionList(); 项目列表添加(项目属性(“费率”); 项目列表添加(项目属性(“金额”); 标准。设置投影(项目列表); List=criteria.List(); for(Iterator it=list.Iterator();it.hasNext();){ 双d=1; Object[]行=(Object[])it.next(); 对于(int i=0;i

尝试此操作。

您可以创建一个
@Formula
派生属性,然后在该属性上创建投影:

派生属性:

@Entity
@Table(name="INVOICE")
public class Invoice {
    private double rate;
    private double amount;
    @Formula("rate * amount")
    private double computed;
    // ...
}
预测:

Projections.sum("computed")

这是一个开始:这是可行的,但我想知道是否有不同的性能相比(见更新)。我觉得这应该更快。
Projections.sum("computed")