Question

Essayer de créer un objet à partir d'une requête HQL, mais je ne peux pas comprendre ce que je fais mal.

Requête:

String query = "SELECT product.code, SUM(product.price), COUNT(product.code)
from Product AS product
GROUP BY product.code"

(ou devrais-je utiliser les nouvelles MyCustomList (product.code, SUM (..., même si ce n'est pas mis en correspondance?) Maintenant, je veux lancer cette liste retournée dans un objet similaire:

class MyCustomList{
  public String code;
  public BigDecimal price;
  public int total;

  // Constructor
  public MyCustomList(String code, String price, int total){ //...

Récupération des données:

// This throws ClassCastException    
List<MyCustomList> list = MyClass.find(query).fetch();

Utilisation cadre de lecture

Était-ce utile?

La solution

Je pense que la section 15,6 . La clause select de ce que vous les couvertures essayez d'atteindre:

  

15.6. La clause select

     

...

     

Les requêtes peuvent retourner plusieurs objets   et / ou des propriétés en tant que tableau de type   Object[]:

select mother, offspr, mate.name
from DomesticCat as mother
    inner join mother.mate as mate
    left outer join mother.kittens as offspr
     

Ou comme 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
     

Ou - en supposant que la Family de classe   a un constructeur approprié - comme   typé Java objet:

select new Family(mother, mate, offspr)
from DomesticCat as mother
    join mother.mate as mate
    left join mother.kittens as offspr

Dans votre cas, vous voulez probablement:

SELECT new MyCustomList(product.code, SUM(product.price), COUNT(product.code))
from Product AS product
GROUP BY product.code

MyCustomList est pas nécessairement une entité mappée.

Autres conseils

Je sais que c'est un ancien poste, mais vous pouvez également utiliser pour HQL:

Query query = session.createQuery("SELECT code AS code FROM Product"); 

ou cela pour SQL:

Query query = session.createSQLQuery("SELECT code AS code FROM Product");

avec:

query.setResultTransformer(Transformers.aliasToBean(MyCustomList.class));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top