2009-06-07 20 views

Odpowiedz

9

Myślę, że można również użyć projekcji SQL. To powinno być coś takiego:

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

Czy możesz powiedzieć, gdzie jest funkcja, która tworzy w sumie? To tylko tworzy produkt. – Victor

1

Nie jest to dokładnie to, o co prosiłeś, ale możesz użyć "właściwości pochodnych", aby uzyskać coś podobnego.

Na przykład, można zmapować właściwość totalPrice do wyrażenia SQL:

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

Formuła SQL „ilość * cena” jest oceniany za każdym razem, jednostka jest pobierane z bazy danych.

Ori

hibernacji docs zawierać więcej informacji na ten temat.

1

Jest (prawdopodobnie) niemożliwe, aby zrobić to za pomocą kryteriów. Ale może być pomocne dla tego HQL.

SELECT ent.quantity*ent.price from EntityName as ent WHERE ent.id = ? 
Powiązane problemy