Новый объект с 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();
Использование структуры воспроизведения
Ответы
Ответ 1
Я думаю, что раздел 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));