`
fly.net.cn
  • 浏览: 183524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate操作视图实例

阅读更多
开发环境:Eclipse3.2+MyEclipse5.01GA;框架使用:Struts+Spring+Hibernate
在Employee数据库中有三个表:EmployeeInfo(员工信息表)、Depts(部门表)、Business(职务表)
EmployeeInfo表结构:
emp_id主键
emp_name
emp_sex
emp_age
emp_dept存储dept_id
emp_business存储business_id
emp_address

Depts:
dept_id主键
dept_name

Business:
business_id主键
business_name

在应用程序中需要查询员工的详细信息,包括部门和职务名称,要完成这样的查询需要较长较复杂的SQL代码,与其在程序中书写代码不如在数据库建立一个视图来简化程序的操作,其SQL代码如下:
create view employeedetialinfo AS (select e.emp_id,e.emp_name,e.emp_sex,e.emp_age,d.dept_name,
b.business_name,e.emp_address from employeeinfo e,depts d,business b where e.emp_dept=d.dept_id and e.emp_business=b.business_id;

以上的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主键,所以你可看到生成出来的文件有四个,分别是
Employeedetialinfo.hbm.xml(映射文件)
Employeedetialinfo.java(持久化类文件)
EmployeedetialinfoId.java(视图的数据结构类)
EmployeedetialinfoDAO.java(DAO:Data Access Object用来简化数据操作的类,常用的添加、删除、更新、查询都可以在这个类里得到快速的实现)
如果对表进行映射是没有EmployeedetialinfoId这个类文件的。

在Action中的处理代码是这样的:
public class EmployeeDetialAction extends ActionSupport {
    /*
     * Generated Methods
     */

    /**
     * Method execute
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {       
        String empId=request.getParameter("id");//获得页面传递的员工编号
        EmployeedetialinfoDAO empInfoDAO=EmployeedetialinfoDAO
                                        .getFromApplicationContext(getWebApplicationContext());
        List list=empInfoDAO.findByProperty("id.empId", empId);
        Employeedetialinfo emp=(Employeedetialinfo)(list.get(0));
        EmployeedetialinfoId empInfo=emp.getId();
        request.setAttribute("empinfo", empInfo);
        return mapping.findForward("EmployeeDetial");
    }
}

在实际应用中,我们需要根据一个已知的员工ID来得到他的详细信息,之前我使用empInfoDAO.findById方法,这个方法传递进去的参数是一 个EmployeedetialinfoId对象,我实际化了EmployeedetialinfoId类后再setEmpId,得出来的结果都是 Nullpoint;整整找了快一个月的资料都没能找出个所以然;后来我试了findByProperty方法,它在DAO类里的定义是这样的:
public List findByProperty(String propertyName, Object value)
第一个参数是类里的属性名,第二个参数是值;需要注意的是如果在设置参数的时候直接传empId这个属性将会报错,提示找不到这个属性,而是需要在 empId前面加上父类名Id,即"id.empId",这个ID是何许人也?它的定义就在Employeedetialinfo.hbm.xml映射文 件里,<composite-id name="id" class="com.terry.hibernate.modal.EmployeedetialinfoId">。
分享到:
评论
1 楼 murphy3847 2009-03-27  
哥们,我也遇到这个问题了,还有点疑问,可以交流一下吗?

相关推荐

    hibernate 主键一对一映射(单向) 实例(java类)

    关于hiberante主键的一对一的映射,单向的,实例

    SpringMVC+Hibernate实例

    --视图解析--&gt; &lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/&gt; ...

    Eclipse+Web开发从入门到精通(实例版)

    8.7 Hibernate 操作数据库的方法... 159 8.8 系统主界面... 161 8.8.1 主界面窗体的创建... 161 8.8.2 为每个菜单项添加响应事件... 164 8.8.3 为系统增加权限控制... 168 8.9 用户管理... 169 ...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    spring完全学习实例(一)

    主要包括Spring的IoC、AOP(注释注入、Schema注入、与AspectJ的集成、有接口和无接口的实现的界面编程)、中间数据访问层(编程事事务管理、声明式事务管理、与Hibernate的集成、与JDO的集成、与JTA的集成、纯Spring...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java开发oa办公系统源码-jeesite_hibernate:在thinkgemjessite_hibernate的基础上继续开发

    MVC作为模型视图控制器、Hibernate作为数据库操作层,此组合是Java界业内最经典、最优的搭配组合。前端界面风格采用了结构简单、性能优良、页面精致的Twitter Bootstrap作为前端展示框架。 JeeSite 已内置一系列企业...

    DWZ客户端框架

    Dwz客户端框架的实例简单介绍(技术是:SpringMVC+hibernate视图是:jsp)

    spring 3.0 jar 所有开发包及开发项目实例

    spring 3.0 jar 最新所有开发包及开发项目实例 spring 3.0已经全面支持OSGi了。 各发行包的大致描述如下: org.springframework.asm-3.0.0.M4.jar: 提供对ASM(一个字节码框架)的简单封装 org.springframework....

    健身俱乐部Web网站-JSP+Servlet+Hibernate+jQuery+Ajax

    系统采用分层架构,由上到下分为视图层、控制转发层、业务层、服务层、数据库访问层。运用了一些基本设计模式,系统可扩展性还是非常良好的。 具体安装运行方法见readme.txt文件。附带了建表sql文件。最好先看下...

    UML实例之在线销售系统案例

    目录 1. 介绍 6 1.1 目的 6 1.2 范围 6 1.3 定义,缩写词 6 1.4 参考文献 6 ...7.7 HIBERNATE 32 7.8 MYSQL 32 8. 数据视图 32 9. 规模和性能 33 9.1 满足的规模 33 9.2 满足的性能 33 10. 质量 33

    JAVA程序开发大全---上半部分

    9.4 Hibernate应用实例:基于Struts+Hibernate的登录系统 155 9.5 本章小结 160 第10章 Spring框架的开发及应用 161 10.1 Spring框架概述 161 10.2 Spring框架中的IoC编程 162 10.2.1 控制反转的原理 163 10.2.2 ...

    java开发oa办公系统源码-jeesite_hibernate:jeesite_hibernate

    MVC作为模型视图控制器、Hibernate作为数据库操作层,此组合是Java界业内最经典、最优的搭配组合。前端界面风格采用了结构简单、性能优良、页面精致的Twitter Bootstrap作为前端展示框架。 JeeSite 已内置一系列企业...

    java开发oa办公系统源码-jeesite_hibernate:jeesite_hibernate备份

    MVC作为模型视图控制器、Hibernate作为数据库操作层,此组合是Java界业内最经典、最优的搭配组合。前端界面风格采用了结构简单、性能优良、页面精致的Twitter Bootstrap作为前端展示框架。 JeeSite 已内置一系列企业...

    java版oa源码下载-jeesit:ApacheShiro+SpringMVC+HibernateSearch+Hibernate+Boot

    MVC作为模型视图控制器、Hibernate作为数据库操作层,此组合是Java界业内最经典、最优的搭配组合。前端界面风格采用了结构简单、性能优良、页面精致的Twitter Bootstrap作为前端展示框架。 JeeSite 已内置一系列企业...

    java开发oa办公系统源码-jeesite-master_hibernate:jeesite-master_hibernate

    MVC作为模型视图控制器、Hibernate作为数据库操作层,此组合是Java界业内最经典、最优的搭配组合。前端界面风格采用了结构简单、性能优良、页面精致的Twitter Bootstrap作为前端展示框架。 JeeSite 已内置一系列企业...

Global site tag (gtag.js) - Google Analytics