【问题标题】:Arithmetic operations using Criteria使用标准的算术运算
【发布时间】:2012-11-12 16:04:43
【问题描述】:

我想在休眠中使用 Criteria API 执行算术运算。 SQL 是:

SELECT salary + 500 FROM EMPLOYEE;

如何使用 Criteria 实现这一目标?

我只能使用Projection 检索 SALARY 列,但之后不知道如何对其执行算术运算: session.createCriteria(Employee.class).setProjection(Projections.projectionList().add(Projections.property("salary"))

请让我知道这件事。

问候,

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    你有几种可能:

    • 创建您自己的 Projection 类,该类会生成“salary + 500”选择子句。您可以使用属性投影作为模板
    • 使用 HQL 而不是标准
    • 不是在查询中执行此操作,而是在 Java 中执行此操作:您选择薪水,遍历返回的列表,然后将 500 添加到列表中的每个薪水。

    【讨论】:

    • 感谢您的即时回复。您能否提供一些示例代码,例如如何创建我们自己的 Projection 类?
    • @user182944 不要矫枉过正。最好的方法是使用 HQL 获得价值,然后添加 500 恕我直言。
    • 使用HQL,我们可以直接在查询中使用+操作符,而不是取值后加500。但是我仍然想创建自己的 Projection 类,因为我被要求仅对我的应用程序使用标准(真的很沮丧,但无能为力:( )。这样做的第一步可能是实现 Projection 接口,但不要知道如何处理该投影接口的未实现方法来实现我的目的。有人可以指导吗?
    • 如我所说,以属性投影为起点:github.com/hibernate/hibernate-orm/blob/master/hibernate-core/…
    【解决方案2】:

    请参见下面的示例,该示例使用 SQL Projections 在价格和数量之间查找产品。

    session.createCriteria(Order.class) 
            .createAlias("order", "od") 
            .setProjection( Projections.projectionList() 
                .add( Projections.groupProperty("od.orderId") ) 
                .add( Projections.groupProperty("od.rate") ) 
                .add( Projections.groupProperty("od.quantity") ) 
                .add( Projections.sqlProjection( 
                        "price * quantity as total", 
                        new String[] { "totalAmount" }, 
                        new Type[] { Hibernate.DOUBLE } 
                      ) 
                ) 
            ); 
    

    希望对你有帮助。

    【讨论】:

    • 在上面的代码中,我认为totaltotalAmount 将是相同的名称,即totaltotalAmount。当我尝试使用不同的名称时,我遇到了异常。
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多