在使用Hibernate查询的时候,我们有时候无法直接查询到某些属性,比如查询保单表PublicPolicy,里面有产品ID,但是页面要显示产品名称,在Product表中。当然,我们也可以采用连表查询的方式,查询出对象数组,比如:
select pd.productName, pp from PublicPolicy pp,Product pd where pp.productCode = pd.productCode
return query.list();
这样,在返回的对象数组就包含了产品名称和对应的这个保单对象。
除此之外,我们还可以通过HASHMAP在页面中直接得到productCode对应的productName
思路如下:
在 DAO 中,查询到所有的产品信息。
try { Session _session = session == null ? getSession() : session; String hql = "select productCode, productName from Product order by createDate"; Query query = _session.createQuery(hql); return query.list(); } catch (Exception e) { log.error("查询出错!", e); throw new DaoException("查询出错!"); } finally { if (session == null) { closeSession(); } }
在ACTION中构造HASHMAP
// 方案名称 Map Map schemes = new HashMap(); try { List schemelist = SchemeDao.getInstance().getSchemeAll(null); if(schemelist != null && schemelist.size() > 0){ for(int i=0; i<schemelist.size(); i++){ Object[] objs = (Object[]) schemelist.get(i); schemes.put(objs[0], objs[1]); } } } catch (DaoException e) { // TODO Auto-generated catch block log.error(e); } request.setAttribute("schemeMap", schemes);
在页面中可以直接得到产品名称。
<!--<td nowrap> <%--方案名称--%> ${schemeMap[billDetail.schemeCode] } </td>
这种方法比较方便灵活,而且不必改变原有的查询,值得借鉴。