Nouvel objet avec HQL

Essayer de créer un objet à partir d'une requête HQL, mais ne peut tout simplement 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 New MyCustomList (product.code, somme(... même si ce n'est pas mappé?) 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 du cadre de jeu

23
demandé sur KLE 2010-10-27 00:41:10

2 réponses

, 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 propriétés comme 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é comme un objet Java typesafe réel:

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 je veux 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.

44
répondu Pascal Thivent 2010-10-26 21:52:54

Je sais que c'est un ancien post, 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
répondu Jason Glez 2017-10-10 18:43:48