我有以下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);
}
任何人都可以帮助我吗?
答案 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中使用此代码,而是在服务或存储库类中。