用HASHMAP显示某些无法直接查询到的关联属性

在使用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>

 

这种方法比较方便灵活,而且不必改变原有的查询,值得借鉴。

你可能感兴趣的:(DAO,Hibernate)