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

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

27 голосов
/ 27 октября 2010

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

Запрос:

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();

Использование Play Framework

Ответы [ 2 ]

45 голосов
/ 27 октября 2010

Мне кажется, что раздел 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

или какa 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 не обязательно является сопоставленной сущностью.

1 голос
/ 10 октября 2017

Я знаю, что это старый пост, но вы также можете использовать для 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...