`
anson_xu
  • 浏览: 514658 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

个人心得Hibernate对视图的映射

阅读更多

个人心得Hibernate对视图的映射

java技术 2010-05-24 00:41:35 阅读120 评论0   字号: 订阅

 

 个人心得Hibernate对视图的映射

在使用 Hibernate的时候,如果数据库使用到触发器,那么就需要在数据库的触发器中as begin 增加一句set nocount on 来禁止触发器对行影响的输出,因为Hibernate会对受影响的行进行判断,以判断是否执行save或者update操作,在触发器中禁止受影响行的输出能解决这个问题!

 

在使用hibernate映射数据表,如果设置太多的映射关系,many-to-one,one-to-many,one-to-one的话则hibernate生成的hql语句太多,造成太多的数据冗余,效率太低,而且太多的字段都用不到,所以可以通过创建数据库视图的方式,hibernate中通过对视图的映射,读取自己所需要的字段信息来进行信息的查询, hibernate中使用视图与普通表不太一样,因为视图没有主键,所以不能通过myEclips 的反映射视图功能对视图表进行操作, 但是可以通过自己创建hibernate的实体类与xml的映射文件来配置视图表,

在设置xml映射文件时,可以通过视图表中的某个唯一字段或者identity字段来虚拟表中的主键,也就是设置xml中的id类型为identity (identity为数据库自动生成标识列,如果为其他的方式获取到主键编号,则可以设置为其他的字段类型):

 

在做视图映射的时候, 配置文件中 设置的主键编号一定不能在视图表内出现重复,否则会出现查询返回的数据条数正确,但是数据却全部都是重复的,因为主键是不能重复的,配置文件只会查找 主键 不一致的记录,  所以推荐 假设主键为其中一个最终子表的ID,那么视图表中这个字段也就不存在重复的数据了

 

Hibernate 若是查询只需几个字段的数据,则可以重新定义一个新的实体类+映射表+DAO类来进行创建,如果偷懒使用原来的实体类,则不能返回你需要的字段,如果返回,则不清楚返回的类型是什么……偷懒无效ing

 

假设有个视图,内有字段:

 

private Integer memId;  用户的编号

    private Integer regId;   用户是密码的保护设置对应的id

    private String memName;  用户的登陆名

    private String memNickName; 用户的昵称

    private Integer memSex;     用户的性别

    private Byte memStatus;    用户的状态

 

    其中,memId 为用户信息表的主键id, regId 为用户密码保护问题表的id,regId所在的表有外键对应用户信息表的主键memId.

    则在xml中的设置为:

 

              设置视图表的实体类                    视图表的表名称

<class name="com.myBlog.po.ViewSessionInfo" table="ViewSessionInfo" schema="dbo" catalog="BlogDB">

<id name="memId" type="java.lang.Integer">    可以假设个主键,使用视图表中的memId字段

           <column name="mem_ID" />             视图表中的字段名

           <generator class="identity"/>        设置memId 字段生成策略

       </id>                  其他字段的设置就和普通的表的字段设置是相同的

       <property name="regId" type="java.lang.Integer">

           <column name="reg_ID" />

       </property>

       <property name="memName" type="java.lang.String">

           <column name="mem_Name" length="20" />

       </property>

            <property name="memNickName" type="java.lang.String">

                <column name="mem_NickName" length="20" />

            </property>

            <property name="memSex" type="java.lang.Integer">

                <column name="mem_Sex" />

            </property>

            <property name="memStatus" type="java.lang.Byte">

                <column name="mem_Status" />

            </property>

</class>

*******************************************************

ViewSessionInfo 实体类设置如下:

 

public class ViewSessionInfo implements java.io.Serializable { private Integer memId;

    private Integer regId;

    private String memName;

    private String memNickName;

    private Integer memSex;

    private Byte memStatus;

    public ViewSessionInfo() {

    }

    public ViewSessionInfo(Integer memId, String memName, String memNickName) {

       this.memId = memId;

       this.memName = memName;

       this.memNickName = memNickName;

    }

    public ViewSessionInfo(Integer memId, Integer regId, String memName,

           String memNickName, Integer memSex, Byte memStatus) {

       this.memId = memId;

       this.regId = regId;

       this.memName = memName;

       this.memNickName = memNickName;

       this.memSex = memSex;

       this.memStatus = memStatus;

    }

    public Integer getMemId() {

       return this.memId;

    }

    public void setMemId(Integer memId) {

       this.memId = memId;

    }

    public Integer getRegId() {

       return this.regId;

    }

    public void setRegId(Integer regId) {

       this.regId = regId;

    }

    public String getMemName() {

       return this.memName;

    }

    public void setMemName(String memName) {

       this.memName = memName;

    }

    public String getMemNickName() {

       return this.memNickName;

    }

    public void setMemNickName(String memNickName) {

       this.memNickName = memNickName;

    }

    public Integer getMemSex() {

       return this.memSex;

    }

    public void setMemSex(Integer memSex) {

       this.memSex = memSex;

    }

    public Byte getMemStatus() {

       return this.memStatus;

font-fam

分享到:
评论

相关推荐

    基于hibernate的简单留言本

    Hibernate是一个开源的Java框架,主要用于简化企业级应用中的对象关系映射(Object-Relational Mapping,ORM)。它允许开发者将数据库操作转换为对Java对象的操作,从而降低了开发人员处理SQL和JDBC的复杂度,提高了...

    hibernatetools文档

    - 结构化编辑器进一步增强了对映射文件和配置文件的处理能力。 - 支持更高级的编辑功能,如语法高亮、错误检查等。 ##### 4.8 JBoss Tools Properties Editor - **JBoss Tools**的属性编辑器允许用户方便地配置项目...

    SpringMVC+hibernate+spring实现增删改查

    在增删改查操作中,Hibernate通过实体类(Entity)与数据库表进行映射,提供了一套API来执行CRUD操作,如save()、delete()、update()和get()等。 Spring框架作为整体的胶水层,连接了SpringMVC和Hibernate。它提供...

    ssh框架总结_ ssm心得体会-Java文档类资源

    **Hibernate框架** 是一个对象关系映射(Object-Relational Mapping,ORM)工具,能够将Java对象与数据库表之间的映射关系自动化,使得开发者可以更专注于业务逻辑而不是数据库操作。Hibernate支持多种数据库,如...

    Spring+struts2+hibernate框架整合

    它结合了Spring的依赖注入、AOP(面向切面编程)、事务管理,Struts2的MVC(模型-视图-控制器)设计模式,以及Hibernate的对象关系映射功能,为开发者提供了强大且灵活的工具集。 Spring框架是这个组合的核心,它...

    java学习感悟,对框架的学习心得

    本文主要探讨的是SSH框架,即Struts、Spring和Hibernate的使用心得。 首先,Struts作为经典的MVC(模型-视图-控制器)框架,其核心是struts-config.xml配置文件。这个配置文件定义了请求路径、动作映射、以及Action...

    java web开发心得

    不断学习和实践,加深对JSP、Hibernate、JavaScript和数据库的理解,将使你成为一位更出色的Java Web开发者。无论你是初学者还是经验丰富的程序员,都可以从这些心得中找到提升自己技能的新路径。

    博客系统(struts+hibernate+spring).rar

    博客系统是一种基于Web的应用程序,通常用于发布个人或团队的文章、见解、心得等内容。这个"博客系统(struts+hibernate+spring).rar"压缩包文件包含了一个使用三大热门Java框架——Struts、Hibernate和Spring构建的...

    SSH项目源码及心得体会

    开发者可能分享了如何配置Struts2的action和interceptors,Spring的bean定义以及Hibernate的数据模型映射。此外,还可能涉及到了Spring的事务管理,以及如何利用这些框架实现数据库的CRUD操作和复杂的查询。 初学者...

    java培训个人总结.pdf

    Java培训个人总结主要涵盖了五个部分,分别是Java培训后的总结、Java实训个人总结、Java个人实习总结、Java培训课心得总结以及SSH框架的学习体会。以下是详细的知识点解析: 1. **Struts2**: - `Hello Struts2`...

    spring个人心得888

    Spring MVC通过DispatcherServlet接收请求,处理器映射器和处理器适配器负责找到合适的处理器,最后视图解析器将结果呈现给用户。 七、数据访问集成 Spring提供了对各种数据库的集成支持,包括JDBC、ORM框架如...

    SSH整合流程(个人总结,仅供参考)

    3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它可以将Java对象与数据库表进行映射,简化数据库操作。在整合中,Hibernate负责数据持久化,需要导入Hibernate库,配置hibernate.cfg.xml文件,定义...

    ssh三大框架学习心得

    6. **Hibernate映射**:学习XML或注解方式的实体类与数据库表的映射配置。 7. **Hibernate查询**:熟练使用HQL、Criteria API进行数据查询,了解Criteria API的优势。 8. **事务管理**:理解Spring的声明式事务管理...

    Spring学习心得(一)

    此外,Spring还支持ORM(Object-Relational Mapping)框架,如Hibernate和MyBatis,通过这些框架,开发者可以更方便地操作数据库,进行对象与关系数据的映射。 在事务管理方面,Spring提供了编程式和声明式两种事务...

    JAVA实习报告及心得(6页).doc

    Struts负责MVC(模型-视图-控制器)架构,Hibernate处理对象关系映射,Spring则提供依赖注入和事务管理等功能。通过学习SSH,作者掌握了如何使用这些框架来提高开发效率和代码质量。 4. **JSP技术**:JavaServer ...

    课程报告-基于Java web的个人博客管理系统文档.doc

    3. Hibernate框架:作为持久化层,提供了对象关系映射(ORM)功能,简化了数据库操作,通过映射文件将Java对象与数据库表对应,实现数据的自动持久化。 4. JavaScript与jQuery:用于增强前端交互体验,jQuery库简化...

    s2sh 个人学习笔记

    Spring是全面的后端应用管理框架,Struts提供了MVC(模型-视图-控制器)设计模式,而Hibernate则是流行的ORM(对象关系映射)工具,它们共同构成了强大的Web应用开发解决方案。 【描述】: 虽然描述部分为空,但...

    基于Struts+Spring+hibernate的网上书店购物车

    3. **ORM技术**:Object Relational Mapping(对象关系映射)是一种编程技术,用于将对象模型与关系数据库模型之间进行转换,使得开发者能够更加方便地操作数据库。 4. **常用框架简介**:Struts、Spring 和 ...

    张冰老师的SSH2整合心得

    总结来说,SSH2整合是一个复杂但高效的过程,它将Struts2的视图层、Spring的服务层和Hibernate的数据访问层紧密集成,极大地提高了开发效率和代码质量。通过张冰老师的教程和实践心得,我们可以更好地理解和掌握这一...

Global site tag (gtag.js) - Google Analytics