#java #hibernate #orm #hql #hibernate-mapping
#java #переход в спящий режим #orm #hql #переход в спящий режим-сопоставление
Вопрос:
Я пытаюсь выполнить следующий запрос HQL :
select count(*) , od.itemSubtype.name from OrderDetails od inner join od.itemSubtype where od.employee = 1 group by od.itemSubtype
Мои POJO :
OrderDetails
-------------
private Integer id;
private Employee employee;
private Order order;
private ItemSubtype itemSubtype;
private Integer quantity;
private String imageStyle;
private String imageCapture;
private Date workStartedOn;
private Date workFinishedOn;
ItemSubtype
-----------
private Integer id;
private ItemType itemType;
private String name;
private Set orderDetailses = new HashSet(0);
private Set measuresBooks = new HashSet(0);
Поскольку запрос не может привести к приведению существующего Pojo, я не могу повторно получить результат. Как я могу выполнить этот запрос? Нужно ли мне писать новый Pojo? Также как мне получить данные из итерации?
Query query = session.createQuery(hql);
// query.setParameter("employee_id", employee_id);
Iterator i = query.iterate();
while (i.hasNext()) {
Object obj = i.next();
// how to retrive values from this obj??
}
Комментарии:
1. Запрос должен возвращать,
List<Object[]>
который вы можете легко повторить с помощьюforEach
цикла или иным образом с помощьюIterator
withwhile
цикла.
Ответ №1:
Вот как вы можете получить результаты:
Query query = session.createQuery("""
select
count(ist.id),
ist.name
from OrderDetails od
inner join od.itemSubtype ist
where od.employee = 1
group by ist.name
"""
);
for(Object rows : query.list()){
Object[] row = (Object[]) rows;
Number count = (Number) row[0];
String itemSubTypeName = (String) row[1];
}