Diciamo che ho un elemento di classe persistente con un campo quantità e un campo prezzo. C'è un modo per costruire un criterio che calcola la somma del prezzo della quantità *?Espressioni nei criteri di ibernazione
6
A
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
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 = ?
Potete per favore dire dove è la funzione che crea il totale? Questo crea solo il prodotto. – Victor