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

¿Fue útil?

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));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top