Hibernate 多表查询结果循环显示(视图解决)
时间:2010-05-28 来源:beanu
开发环境:Eclipse3.2+MyEclipse5.01GA;框架使用:Struts+Spring+Hibernate
在Employee数据库中有三个表:goodsinfo(商品表)、storage(库存表)、warehouseinfo(仓库表)
goodsinfo表结构:
goodsId(主键) goodsName price unit cateid safetyamt
storage:
goodsId(主键) whId(主键) cargospace storage
warehouseinfo:
Id whId(主键) whName whAddress whCharge
在应用程序中需要查询库存量小于安全存量的详细信息,包括条形码和商品名称,要完成这样的查询需要较长较复杂的SQL代码,与其在程序中书写代码不如在数据库建立一个视图来简化程序的操作,其SQL代码如下:
create view needpurchase AS (select a.goodsId,a.goodsName,c.whName,b.cargospace,b.storage,a.safetyamt from Goodsinfo a,Storage b,Warehouseinfo c where a.goodsId=b.goodsId and b.whId=c.whId and b.storage<a.safetyamt order by a.goodsId);
以上的SQL语句创建了一个名为employeedetialinfo的视图。
现在需要用Hibernate对视图进行映射,生成可持久化类对象。注意:在Hibernate3之后才支持对视图的操作,Hibernate2并不支持如果你的项目中是使用Hibernate2就没必要往下看了。
在Eclipse中切到MyEclipse DataBase Explorer(数据库浏览视图)中打开连接,找到Employee表,选择下面的View子节点,可以看到一个名为employeedetialinfo的视图,鼠标右键点击它,选择“Hibernate Reverse Engineering…”,设置了包路径后,依次钩选“Hibernate Mapping File”、“Java Data Object”(取消钩选“Create abstract class”)以及“Java Data Access Object(DAO)”,在“Java Data Access Object(DAO)”下会自动钩选“Generate precise findby methods”,以及选择“Spring DAO”选项,使用“Spring DAO”后,在DAO类里转而使用了HibernateTemplate对象来操作数据库,可以免去事务管理;这样就生成完持久化类,需要注意的是生成视图映射和生成表映射不一样,因为视图是没有主键的,Hibernate就将视图结构本身做为ID主键,所以你可看到生成出来的文件有四个,分别是
needpurchase o.hbm.xml(映射文件)
needpurchase .java(持久化类文件)
needpurchase Id.java(视图的数据结构类)
needpurchase DAO.java(DAO:Data Access Object用来简化数据操作的类,常用的添加、删除、更新、查询都可以在这个类里得到快速的实现)
如果对表进行映射是没有needpurchase Id这个类文件的。
在Action中的处理代码是这样的:
public class EmployeeDetialAction extends ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
NeedpurchaseDAO needdao=new NeedpurchaseDAO(); List allpurchase=needdao.findAll(); request.setAttribute("allpurchase", allpurchase); return mapping.findForward("success2"); }
}
前台jsp页面显示代码为 c:forEach items="${allpurchase}" var="all" > <span class="STYLE1">${all.id.goodsId}</span> <span class="STYLE1">${all.id.goodsName}</span> <span class="STYLE1">${all.id.whName}</span> <span class="STYLE1">${all.id.cargospace}</span> <span class="STYLE1">${all.id.safetyamt}</span> <span class="STYLE1">${all.id.storage}</span> </c:forEach>
我的最新网站:http://www.sohowow.com 窝窝网赚
在Employee数据库中有三个表:goodsinfo(商品表)、storage(库存表)、warehouseinfo(仓库表)
goodsinfo表结构:
goodsId(主键) goodsName price unit cateid safetyamt
storage:
goodsId(主键) whId(主键) cargospace storage
warehouseinfo:
Id whId(主键) whName whAddress whCharge
在应用程序中需要查询库存量小于安全存量的详细信息,包括条形码和商品名称,要完成这样的查询需要较长较复杂的SQL代码,与其在程序中书写代码不如在数据库建立一个视图来简化程序的操作,其SQL代码如下:
create view needpurchase AS (select a.goodsId,a.goodsName,c.whName,b.cargospace,b.storage,a.safetyamt from Goodsinfo a,Storage b,Warehouseinfo c where a.goodsId=b.goodsId and b.whId=c.whId and b.storage<a.safetyamt order by a.goodsId);
以上的SQL语句创建了一个名为employeedetialinfo的视图。
现在需要用Hibernate对视图进行映射,生成可持久化类对象。注意:在Hibernate3之后才支持对视图的操作,Hibernate2并不支持如果你的项目中是使用Hibernate2就没必要往下看了。
在Eclipse中切到MyEclipse DataBase Explorer(数据库浏览视图)中打开连接,找到Employee表,选择下面的View子节点,可以看到一个名为employeedetialinfo的视图,鼠标右键点击它,选择“Hibernate Reverse Engineering…”,设置了包路径后,依次钩选“Hibernate Mapping File”、“Java Data Object”(取消钩选“Create abstract class”)以及“Java Data Access Object(DAO)”,在“Java Data Access Object(DAO)”下会自动钩选“Generate precise findby methods”,以及选择“Spring DAO”选项,使用“Spring DAO”后,在DAO类里转而使用了HibernateTemplate对象来操作数据库,可以免去事务管理;这样就生成完持久化类,需要注意的是生成视图映射和生成表映射不一样,因为视图是没有主键的,Hibernate就将视图结构本身做为ID主键,所以你可看到生成出来的文件有四个,分别是
needpurchase o.hbm.xml(映射文件)
needpurchase .java(持久化类文件)
needpurchase Id.java(视图的数据结构类)
needpurchase DAO.java(DAO:Data Access Object用来简化数据操作的类,常用的添加、删除、更新、查询都可以在这个类里得到快速的实现)
如果对表进行映射是没有needpurchase Id这个类文件的。
在Action中的处理代码是这样的:
public class EmployeeDetialAction extends ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
NeedpurchaseDAO needdao=new NeedpurchaseDAO(); List allpurchase=needdao.findAll(); request.setAttribute("allpurchase", allpurchase); return mapping.findForward("success2"); }
}
前台jsp页面显示代码为 c:forEach items="${allpurchase}" var="all" > <span class="STYLE1">${all.id.goodsId}</span> <span class="STYLE1">${all.id.goodsName}</span> <span class="STYLE1">${all.id.whName}</span> <span class="STYLE1">${all.id.cargospace}</span> <span class="STYLE1">${all.id.safetyamt}</span> <span class="STYLE1">${all.id.storage}</span> </c:forEach>
我的最新网站:http://www.sohowow.com 窝窝网赚
相关阅读 更多 +