java - Hibernate criteria + Projection List中的计算

标签 java mysql hibernate

发票

iddescriptionrateamount
1发票 A 3.0 10.0
2发票 B 4.0 20.0
3发票 C 5.0 30.0

DetachedCriteria criteria= DetachedCriteria.forClass(Invoice.class)

ProjectionList projList = new ProjectionList(); 
projList.add(...);

criteria.setProjection(projList);

List list = myDAO.findByCriteria(criteria); 

//260

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

更新 1:

   double dblAmount = 0.0;
   for(Invoice invoice : list){
     dblAmount = dblAmount + (invoice.getRate() * invoice.getAmount());
   }

使用 Hibernate 4,听说在不指定连接的情况下,使用这种方式 (invoice.getSomething()) 会影响性能吗?

最佳答案

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

派生属性:

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

投影:

Projections.sum("computed")

关于java - Hibernate criteria + Projection List中的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23012961/

相关文章:

java - 如何在 Java 中将 ArrayList 更改为二维数组

java - JoinColumn Hibernate/API

java - 在Hibernate中对于composite-id,为什么类应该实现Serialized

hibernate - 在内存数据库(HSQLDB或H2)上使用多个架构域运行grails

java - org.apache.kafka.common.errors.TimeoutException : Topic not present in metadata after 60000 ms

java - 是否保证在同一 bean 中使用 @PostConstruct 注释的方法先于使用 @Scheduled 的方法执行?

java - 在 JOptionPane 中单击“确定”时如何阻止 JFrame 关闭

java - 如何使用java在hibernate中一次将数据插入多个表

php - mysql查询中的concat()函数或替代解决方案

mysql - 获取mysql中所有值的总和