web-dev-qa-db-fra.com

Nouvel objet avec HQL

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

Question:

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

(ou dois-je utiliser le nouveau MyCustomList (product.code, SUM (..., même s'il n'est pas mappé?) Maintenant, je souhaite convertir cette liste renvoyé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();

Utiliser le framework Play

26
Indrek

Je pense que la section 15.6. La clause select couvre ce que vous essayez de réaliser:

15.6. La clause select

...

Les requêtes peuvent renvoyer plusieurs objets et/ou des propriétés sous la forme d'un 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 en tant que 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 classe Family a un constructeur approprié - en tant que Objet Java typesafe actuel:

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 n'est pas nécessairement une entité mappée.

45
Pascal Thivent

Je sais qu'il s'agit d'un ancien message, mais vous pouvez également utiliser pour HQL: 

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

ou ceci pour SQL:

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

avec:

query.setResultTransformer(Transformers.aliasToBean(MyCustomList.class));
1
Jason Glez