`
fly.net.cn
  • 浏览: 186469 次
  • 性别: 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  
哥们,我也遇到这个问题了,还有点疑问,可以交流一下吗?

相关推荐

    Struts2_Spring_Hibernate整合开发实例

    Hibernate则是持久层框架,简化了数据库操作,实现了对象-关系映射(ORM)。这三者整合在一起,可以构建出高效、可维护的大型企业级应用。 在"Struts2_Spring_Hibernate整合开发实例"中,我们将深入探讨如何将这三...

    struts+hibernate整合登录实例

    在这个“Struts+Hibernate整合登录实例”中,我们将深入探讨如何将这两个框架集成到一起,实现一个完整的登录系统。 **Struts框架** Struts是一个基于MVC设计模式的Java Web应用框架,它提供了对HTTP请求处理、业务...

    Hibernate + Struts 实例

    【描述】"Hibernate + Struts 实例"表明我们将探讨如何在实际项目中利用这两个框架进行数据库操作和业务逻辑控制。Hibernate负责对象关系映射(ORM),简化了Java与关系数据库之间的交互,而Struts则帮助我们构建MVC...

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

    本实例将深入探讨如何在Hibernate中实现主键级别的单向一对一映射。 首先,我们理解一对一映射的基本概念。在数据库设计中,一对一映射通常发生在两个表的主键之间,其中一个表的主键是另一个表的外键。在Hibernate...

    spring_hibernate整合实例

    Spring是一个全面的Java应用框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,而Hibernate是一个ORM(对象关系映射)框架,用于简化数据库操作。当我们谈论"spring_hibernate整合实例"时,...

    hibernate关联映射实例

    通过这些实例,开发者可以学习到如何在实际项目中应用Hibernate,理解其核心机制,并提高数据库操作的效率。熟悉这些映射方式对于开发复杂的Java应用至关重要,它们帮助我们将复杂的数据库结构转化为易于管理和操作...

    SpringMVC+hibernate实例

    这可能是项目的一个测试部分或者一个示例应用,可能包含了配置文件(如`spring-context.xml`,`hibernate.cfg.xml`)、实体类(Entity)、DAO(Data Access Object)层、Service层、Controller层以及视图相关的JSP或...

    spring+hibernate 框架实例

    而 Hibernate 则是一个 ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以使用 Java 对象来处理数据库事务。 Spring 框架的核心特性包括: 1. **依赖注入(Dependency Injection, DI)**:Spring 使用...

    spring+struts1+hibernate+jbpm实例

    **Hibernate ORM**:Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用Java对象来操作数据库,而无需编写SQL。Hibernate通过实体类、映射文件和Session接口等机制,实现了对象和数据库记录之间的...

    Struts + Hibernate网上书店实例

    总结起来,"Struts + Hibernate网上书店实例"是一个综合性的项目,它涵盖了Web应用开发中的多个核心概念,包括MVC架构、ORM、数据库操作、事务管理、页面渲染以及安全性和性能优化。通过这个实例,开发者可以深入...

    springmvc_hibernate_spring 实例

    Hibernate是一个强大的ORM(对象关系映射)框架,它使得Java开发者可以方便地操作数据库,而无需编写大量SQL代码。Spring框架则作为一个全面的容器,管理应用中的依赖注入和事务控制,为其他组件提供支持。 本实例...

    springmvc与hibernate结合实例

    SpringMVC 和 Hibernate 是两种非常重要的 Java Web 开发框架,它们在实际项目中常常结合使用,以实现模型-视图-控制器(MVC)架构和持久化层的高效管理。本实例将详细介绍如何将 SpringMVC 与 Hibernate 结合,以...

    hibernate实例连oracle

    标题“hibernate实例连oracle”表明我们正在讨论如何使用Hibernate框架来连接并操作Oracle数据库。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程方式来处理数据库交互,而无需...

    Spring+Hibernate+JSF实例

    【Spring+Hibernate+JSF实例】是一个综合性的项目,展示了如何在Java开发环境中整合这三个关键技术。Spring是一个开源的Java框架,主要关注于依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented ...

    hibernate_onetoone实例

    【标题】:“Hibernate一对一实例” 在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作。在这个“Hibernate一对一实例”中,我们将深入探讨如何使用Hibernate来实现对象与...

    struts+hibernate登陆注册实例

    在"身份登录注册"实例中,Struts2 负责接收用户输入、校验数据、调用Hibernate操作数据库,而Hibernate则处理数据的持久化。具体步骤可能如下: 1. 用户填写用户名和密码,点击登录按钮,发送请求到服务器。 2. ...

    SpringMVC+Hibernate小实例

    接下来,Hibernate作为ORM框架,允许开发者使用面向对象的方式来操作数据库。它通过映射Java类到数据库表,实现了对象和记录之间的转换。Hibernate的核心组件有SessionFactory、Session和Transaction。...

    spring mvc,spring, hibernate 整合登录实例

    在本文中,我们将深入探讨如何将Spring MVC、Spring和Hibernate这三大流行框架整合在一起,以构建一个完整的登录实例。这个实例旨在提供一个清晰、简洁且易于理解的代码结构,帮助初学者快速上手。 首先,Spring ...

    使用 MyEclipse 插件创建 Hibernate + Struts 实例

    本实例将探讨如何利用MyEclipse插件构建一个基于Hibernate ORM(对象关系映射)框架和Struts MVC(模型-视图-控制器)框架的项目。这两个框架的结合,能够有效地处理数据持久化和业务逻辑,同时提供良好的用户界面。...

    struts2+hibernate+freemarker项目实例

    在实际开发中,Struts2处理HTTP请求,调用业务逻辑(通常是Service层),Service层利用Hibernate操作数据库,最后由FreeMarker渲染视图返回给用户。这种组合在企业级应用中非常常见,因为它们能有效提高开发效率,...

Global site tag (gtag.js) - Google Analytics