Nuevo objeto con HQL
-
26-09-2019 - |
Pregunta
Tratar de crear un objeto de una consulta HQL, pero simplemente no puede entender lo que estoy haciendo mal.
Consulta:
String query = "SELECT product.code, SUM(product.price), COUNT(product.code)
from Product AS product
GROUP BY product.code"
(o debería utilizar las nuevas MyCustomList (product.code, SUM (..., a pesar de que no se asigna?) Ahora quiero jugar esta lista devuelta en un objeto similar:
class MyCustomList{
public String code;
public BigDecimal price;
public int total;
// Constructor
public MyCustomList(String code, String price, int total){ //...
Recuperación de los datos:
// This throws ClassCastException
List<MyCustomList> list = MyClass.find(query).fetch();
El uso de framework Play
Solución
Creo que la sección href="http://docs.jboss.org/hibernate/core/3.5/reference/en/html/queryhql.html#queryhql-select" 15.6 . tapas de la cláusula select lo que estamos tratando de lograr:
15.6. La cláusula select
...
Las consultas se pueden devolver varios objetos y / o propiedades como una matriz de tipo
Object[]
:select mother, offspr, mate.name from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr
O como
List
:select new list(mother, offspr, mate.name) from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr
O - suponiendo que la clase
Family
tiene un constructor apropiado - como una typesafe real objeto de Java:select new Family(mother, mate, offspr) from DomesticCat as mother join mother.mate as mate left join mother.kittens as offspr
En su caso, es probable que desee:
SELECT new MyCustomList(product.code, SUM(product.price), COUNT(product.code))
from Product AS product
GROUP BY product.code
Cuando MyCustomList
no es necesariamente una entidad asignada.
Otros consejos
Sé que esta es una entrada antigua, pero también se puede utilizar para HQL:
Query query = session.createQuery("SELECT code AS code FROM Product");
antes o para SQL:
Query query = session.createSQLQuery("SELECT code AS code FROM Product");
por:
query.setResultTransformer(Transformers.aliasToBean(MyCustomList.class));