2009-06-07 2 views

risposta

9

Penso che sia possibile utilizzare anche una proiezione SQL. Dovrebbe essere qualcosa di simile:

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 } 
       ) 
      ) 
     ); 

Ori

+0

Potete per favore dire dove è la funzione che crea il totale? Questo crea solo il prodotto. – Victor

1

Non è esattamente quello che hai chiesto, ma puoi usare "proprietà derivate" per ottenere qualcosa di molto simile.

Ad esempio, è possibile associare una proprietà TotalPrice a un'espressione SQL:

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

La formula SQL "quantità * Prezzo" viene valutata ogni volta che l'entità viene recuperato dal database.

Ori

Il Hibernate docs contengono maggiori informazioni su questo.

1

È (probabilmente) impossibile farlo con i Criteri. Ma HQL può essere utile per questo.

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