【问题标题】:Using sum() in hibernate criteria在休眠条件中使用 sum()
【发布时间】:2011-01-07 11:02:07
【问题描述】:

如何将 sql 查询 select sum(amount * direction) from transactions 写入休眠条件?

【问题讨论】:

  • @Closevoter - 这一个真正的问题。

标签: java sql hibernate


【解决方案1】:

我想我找到了答案。您必须使用 Projection.sqlProjection() 而不是 Projections.sum()。示例:

.setProjection(Projections.sqlProjection("sum(cast(amount as signed)* direction) as amntDir", new String[] {"amntDir"} , new Type[] {Hibernate.DOUBLE}));

【讨论】:

  • 你能提出你的答案吗? - 你的初始查询是什么:createQuery("....") - 结果放在哪里? (进入 amntDir?) - 你如何使用结果?
【解决方案2】:

我认为你需要的是公式。像这样的,

@Entity
@Table('TRANSACTIONS')
Class transactions {

     @Column("AMOUNT")
     private double amount;

     @Column("DIRECTION")
     private double direction;

     @Formula("AMOUNT * DIRECTION")
     private double multiplication;

}

并将乘法列添加到您的投影列表中。

【讨论】:

    【解决方案3】:

    Projections 是使用具有休眠条件的聚合函数的关键词。

    roseindia has a short example 用于实现SELECT SUM(...) 查询。看起来很接近你的问题。


    Here's another forum topic 包含 SUM(col1 * col2) 表达式的工作示例,而原始发​​布者之前也有类似的异常问题。

    【讨论】:

    • 我尝试使用“.setProjection(Projections.sum(("amount * direction")))”,但它给了我一个异常“org.hibernate.QueryException: could not resolve property: amount * direction ....”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多