Frage

Der Versuch, ein Objekt aus einer HQL-Abfrage zu erstellen, sondern kann einfach nicht herausfinden, was ich falsch mache.

Abfrage:

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

(oder soll ich verwenden, um neuen MyCustomList (product.code, SUM (..., auch wenn es nicht abgebildet ist?) Jetzt möchte ich diese zurückgegebene Liste in ein ähnliches Objekt werfen:

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

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

Abrufen der Daten:

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

Mit Play-Rahmen

War es hilfreich?

Lösung

Ich denke, dass der Abschnitt 15.6 . Die SELECT-Klausel Abdeckungen, was Sie versuchen zu erreichen:

  

15.6. Die select-Klausel

     

...

     

Abfragen können mehrere Objekte zurückgeben   und / oder Eigenschaften als ein Array des Typs   Object[]:

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

oder als 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
     

oder - unter der Annahme, dass die Klasse Family   einen geeigneten Konstruktor hat - als   Ist typsichere Java-Objekt:

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

In Ihrem Fall möchten Sie wahrscheinlich:

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

Wo MyCustomList ist nicht unbedingt eine kartiert Einheit.

Andere Tipps

Ich weiß, dass dies eine alte Post, aber Sie können auch für HQL verwenden:

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

oder diese für SQL:

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

mit:

query.setResultTransformer(Transformers.aliasToBean(MyCustomList.class));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top