表达式在休眠标准中

时间:2009-06-07 08:16:29

标签: java hibernate

假设我有一个具有数量字段和价格字段的持久类项目。 有没有办法建立一个计算数量和价格总和的标准?

3 个答案:

答案 0 :(得分:9)

我认为你也可以使用SQL投影。它应该是这样的:

session.createCriteria(Item.class) 
        .createAlias("item", "i") 
        .setProjection( Projections.projectionList() 
            .add( Projections.groupProperty("i.id") ) 
            .add( Projections.groupProperty("i.price") ) 
            .add( Projections.groupProperty("i.quantity") ) 
            .add( Projections.sqlProjection( 
                    "price * quantity as total", 
                    new String[] { "total" }, 
                    new Type[] { Hibernate.DOUBLE } 
                  ) 
            ) 
        ); 

大利

答案 1 :(得分:1)

这并不是你要求的,但你可以使用“派生属性”来获得相似的东西。

例如,您可以将totalPrice属性映射到SQL表达式:

<property name="totalPrice" formula="quantity * price" type="big_decimal"/> 

每次从数据库中检索实体时,都会评估SQL公式“quantity * price”。

大利

Hibernate docs包含有关此内容的更多信息。

答案 2 :(得分:1)

使用Criteria(可能)不可能做到这一点。但HQL可能对此有所帮助。

SELECT ent.quantity*ent.price from EntityName as ent WHERE ent.id = ?