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
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êtesPeuvent 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
Où MyCustomList
n'est pas nécessairement une entité mappée.
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));