Подтвердить что ты не робот

Новый объект с HQL

Попытка создать объект из запроса HQL, но просто не могу понять, что я делаю неправильно.

Query:

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

(или я должен использовать новый MyCustomList (product.code, SUM (..., хотя он не отображается?) Теперь я хочу передать этот возвращенный список в похожий объект:

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

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

Получение данных:

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

Использование структуры воспроизведения

4b9b3361

Ответ 1

Я думаю, что раздел 15.6. Предложение select охватывает то, что вы пытаетесь достичь:

15.6. Предложение select

...

Запросы могут возвращать несколько объектов и/или свойства в виде массива типа Object[]:

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

Или как 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

Или - если предположить, что класс Familyимеет соответствующий конструктор - как фактический тип Java-объекта:

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

В вашем случае вы, вероятно, захотите:

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

Где MyCustomList не обязательно является отображаемой сущностью.

Ответ 2

Я знаю, что это старый пост, но вы также можете использовать для HQL:

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

или это для SQL:

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

с:

query.setResultTransformer(Transformers.aliasToBean(MyCustomList.class));