Hibernate createQuery:如何循环结果

时间:2013-12-02 15:44:27

标签: java sql hibernate

我有以下HQL语句:

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:

类Device是MySQL DB“device”表的映射类,具有字符串列模型和Integer列vendor_id。 vendor_id是“供应商”表的ID。 “vendor”表具有Integer列id和字符串列vendorname。我想在JSF页面上显示模型名称和相应的供应商名称,而不是供应商ID。

我对以下循环的第一次尝试无效:

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

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

我建议使用JPA而不是普通的hibernate,然后你可以使用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支持的bean中使用此代码,而是在服务或存储库类中。