Новый объект с HQL
-
26-09-2019 - |
Вопрос
Попытка создать объект из запроса HQL, но просто не могу понять, что я делаю не так.
Запрос:
String query = "SELECT product.code, SUM(product.price), COUNT(product.code)
from Product AS product
GROUP BY product.code"
(Или я должен использовать новый mycustomlist (product.code, сумма (..., хотя это не отображается?) Теперь я хочу бросить этот возвращенный список в аналогичный объект:
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
Решение
Я думаю, что раздел 15,6. Статья выбора охватывает то, что вы пытаетесь достичь:
15,6. Статья выбора
...
Запросы могут вернуть несколько объектов и / или свойств в виде массива типа
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
Имеет соответствующий конструктор - как настоящий объект SystemaFe 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
не обязательно сопоставлен сущность.
Другие советы
Я знаю, что это старый пост, но вы также можете использовать для 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));