2013-12-02 3 views
0

У меня есть следующий HQL заявление:Hibernate CreateQuery: Как перебираем результат

select d.model, v.vendor from Device d, Vendor v where d.vendorId = v.id 

и следующий код Java:

private List<Device> allDevices; 
//Getter and Setter are created 
public List<Device> getAllDevices() { 
    return allDevices; 
} 

public void setAllDevices(List<Device> allDevices) { 
    this.allDevices = allDevices; 
} 

public List<Device> readDevices() { 
    session = HibernateUtil.getSessionFactory().openSession(); 
    String hql = "select d.model, v.vendor from Device d, Vendor v where d.vendorId = v.id"; 
    Query query = session.createQuery(hql); 
    List list = query.list(); 
    allDevices = new ArrayList();  
//Here comes the code, loop, for getting the values from the list !?! 
[...] 
session.close(); 
return allDevices;  
} 

Мой вопрос: Как я могу получить значения из query.list() и добавить их в allDevices ArrayList:

Устройство класса является классом отображения таблицы «устройство» базы данных MySQL и имеет модель столбцов строки и целочисленный столбец vendor_id. Vendor_id - это идентификатор таблицы «vendor». Таблица «vendor» имеет идентификатор столбца Integer и имя столбца столбца. Я хотел бы показать на странице JSF имя модели и соответствующее имя поставщика вместо идентификатора поставщика.

Моя первая попытка со следующей петлей не работает:

for (int i = 0; i < list.size(); i++) { 
      device = (Device) list.get(i); 
      allDevices.add(device); 
     } 

Может кто-нибудь помочь мне?

+0

Опубликовать свой приемник/сеттер? Как называется метод чтения? –

+0

Я добавил методы getter и setter – user2992380

ответ

2

Я предлагаю использовать JPA вместо простого спящего режима, тогда вы можете использовать TypedQuery, и вы используете стандарты. Если покупать довольно легко сделать переключатель, а затем вы можете оставить ваш HibernateUtil класс

@PersistenceContext 
private EntityManager em; 

public List<Device> readDevices() { 
    String hql = "select d.model, v.vendor from Device d, Vendor v where d.vendorId = v.id"; 
    TypedQuery<Device> query = em.createQuery(hql, Device.class); 
    allDevices.addAll(query.getResultList()); 
    return allDevices;  
} 

Также вы, вероятно, не хотят этого кода в вашем JSF поддержке боба, но в службе или классе репозитория вместо этого.

+0

Привет Я пробовал то, что вы предложили, но EntityManager em не имеет метода createTypedQuery(). Я могу выбрать другие, например createNamedQuery, createQuery, createNativeQuery! – user2992380

+0

Мой плохой. Это просто 'createQuery' ... Изменен ответ. –

Смежные вопросы