Java 休眠标准+;投影表中的计算 发票联
iddescriptionrateamountJava 休眠标准+;投影表中的计算 发票联,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
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")