2011-01-07 11 views

Respuesta

14

Creo que encontré la respuesta. Debe usar Projection.sqlProjection() y no Projections.sum(). Ejemplo:

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

Can Desarrollas tu respuesta? -¿Cuál es su consulta inicial: createQuery ("....") -Dónde se pone el resultado? (¿en amntDir?) -¿Cómo usas el resultado? –

1

Proyecciones es la palabra clave para usar funciones de agregado con criterios hibnerate.

roseindia has a short example para implementar una consulta SELECT SUM(...). Se ve bastante cerca de tu problema.


Here's another forum topic que incluye un ejemplo de trabajo para una expresión SUM(col1 * col2) y el cartel original tenía problemas parecidos con las excepciones antes.

+0

Lo intenté con ".setProjection (Projections.sum ((" amount * direction ")))" pero me da una excepción "org.hibernate.QueryException: could not resolve property: amount * direction ...." – panagdu

6

Creo que lo que necesitas es fórmula. Algo como esto,

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

    @Column("AMOUNT") 
    private double amount; 

    @Column("DIRECTION") 
    private double direction; 

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

} 

Y agregue la columna de multiplicación a su lista de proyección.

Cuestiones relacionadas