`
学会做人
  • 浏览: 121294 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate的对象--关系映射(1)

阅读更多

                                                                            Hibernate 对象--关系映射

 

 

一、hibernate 的原理

1、在hibernate操作业务实体对象持久化到数据库的时候,有三种状态、瞬时状态。持久化状态、游离状态

hibernate对JDBC进行了封装,在hibernate中持久化的访问方法调用者有两个。一个是java应用程序、一个

 是 hibernate 的session会话数据库对象的方法!

其中就涉及了反射机制、当调用Session的update和save方法的时候,

用反射机制对 xml文件的配置信息进行读取   和 反射出持久化对象、再调用java应用程序的

     getxx方法

当调用Session的load方法和get方法时,就直接进入 持久化状态、就会调用java程序的setxx方法

 

 

2、缓存的问题

 

   这个缓存的问题有一点难理解,

 

  A、 a、 假如说业务对象的oid是1的话,并且在数据库中存在此oid

    当执行Session的load方法的时候返回一个对象,在执行打印此对象的时候,

   会打印出对象的地址 和 一句sql例如:Hibernate:

    select

        book0_.BID as BID0_0_,

        book0_.BNAME as BNAME0_0_

    from

        t_book book0_

    where

        book0_.BID=?

  sql要必须在对象--关系映射配置文件中设置  <property name="hibernate.show_sql">true</property>)才会显示sql语句)

 

   b、假如说业务对象的oid是个不存在的id的话!执行打印就会报 org.hibernate.ObjectNotFoundException: No row with the given identifier exists

 

 

总结:因为,利用Session对象调用的load方法,会自动在一级缓存里面创建一个代理对象proxy,而与数据库无关,当你调用代理的任意方法时,都会触发更具oid查询数据库 ,如果数据库里没有oid则抛出异常错误信息!

 

 

B

  a、利用Session对象的get方法的话,如果访问的oid 存在的话!

  则会打印出查询的sql语句!并且打印出对象的引用地址。

  b、如果oid 不存在的话,则会打印出sql语句,和 null

 

 

总结:利用Session对象调用get方法时,会先到一级缓存里去找有没有代理对象,

如果在代理对象里面没有的话!就会直接根据OID查询数据库,如果没有数据的话则返回null 值。如果有的话,则查询后填充数据再创建代理对象

 

 

 

C、最后就是当session关闭后,而又需要实体对象的时候,就可以使用get方法来实现!

 

  

 

 

 

 

 

 

 

二、hibernate对象识别

 

hibernate 在识别持久化对象的三种状态的过程中是用的OID来识别的,

因为,在java中有两种方式识别对象,一种就是通过比较两个对象的内存地址

第二种就是利用equals方法比较两个对象的内容;但对于关系型数据库中区分和识别持久化对象(每一条记录) 就是用的每一条记录的主键来识别的;

而OID就是数据库中对象的主键在对象模型中的表现

 

 

三、hibernate对象映射的实现步骤

 

1、集合映射(Set和List)

 

 

A、创建Hibernate配置文件hibernate.cfg.xml

 

 

B、创建 业务实体对象

 

     a、实现Serializable接口   

     b、公共的构造方法

     c、私有的属性(包括要映射的set集合对象和list集合对象)

        在创建集合对象的时候要注意初始化化!

       private Set autherSet = new HashSet();

     private List previewList = new ArrayList();

 例如:

     d、get/set的访问属性的方法

 

C、创建数据库的表(set和list里面对象的表也要设计在其中,都建一个以业务实体对象表的id为一个

   字段)

 

D、创建对象关系--映射的配置文件(对象名.hbm.xml)

       其中<set> 和<list>标签要设置

a、Set映射:(不能重复)

  

      <set name="持久化类中的集合对象名"  table="集合对象所对应的表名">

        <key column="标明table表中的每一条记录是属于哪个对象"/>

      </set>

     

       <Set>元素的name属性指定了持久化类中的集合对象,table属性指定集合对象所对应的表,

为了标明table表中的每一条记录是属于哪个对象的,使用了<key>元素的column属性来标识

     

   b、List映射:<可以重复>

      <list name="持久化类中的集合对象名" talbe="集合对象所对应的表名">

        <key column="标明table表中的每一条记录是属于哪个对象">

        <index column="LISTINDEX"><!-- 在table对应的表中创建了一个LISTINDEX字段 -->

      </list>

E、利用hibernate API 操作实体对象

       a、创建Configuration对象

       b、创建SessionFactory对象

       c、创建一个保存对象到数据库的方法

       d、在此方法中创建Session会话数据库对象

 

         (具体细节操作省略,没有做详细总结)

 

在 mian方法里执行保存时,执行一次了,就不能在用同一个oid来执行,否则会报Could not execute JDBC batch update  

 

因为如果有oid,hibernate就认为是在做update

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-configuration-3.0.dtd`和`hibernate-mapping-3.0.dtd`是Hibernate 3.0版本中的两个核心文件,它们定义了...

    hibernate5--3.映射关系

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)...

    Hibernate one-to-many / many-to-one关系映射

    在开发过程中,IDE如Eclipse或IntelliJ IDEA提供了对Hibernate的集成支持,包括代码生成、对象关系图显示以及自动配置检查,这使得关系映射的设置更加直观和便捷。 六、最佳实践 1. 选择合适的集合类型:根据业务...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip

    在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而Eclipse作为主流的Java集成开发环境,其丰富的插件生态使得开发效率得以提升。"hibernatetools-Update-4.1.1.Final_...

    对象-关系映射—Hibernate 培训 (中文)

    对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳...

    HibernateTools-3.2.4

    在HibernateTools 3.2.4版本中,它包含了一系列的特性与插件,以支持更便捷地进行对象关系映射(ORM)管理和数据库交互。 一、Hibernate Tools的主要功能: 1. **逆向工程(Reverse Engineering)**:能够从现有的...

    hibernate-release-5.2.10

    Hibernate是Java平台上的一款开源对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。在SSH(Spring、Struts、Hibernate)框架中,Hibernate作为持久层的解决方案,极大地简化了数据库操作的...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605

    Hibernate Tools是开发者在使用Hibernate框架进行Java应用程序开发时的重要辅助工具,它为Eclipse IDE提供了强大的集成支持,包括对象关系映射(ORM)的可视化设计、逆向工程、数据库生成、HQL和SQL查询编辑等功能。...

    HibernateTools-3.2.4.Beta1-R200810311334.zip

    《HibernateTools 3.2.4 Beta1:高效数据库管理和对象关系映射工具》 HibernateTools是Java开发者的重要辅助工具,它为Hibernate框架提供了一系列实用的集成开发环境(IDE)插件和命令行工具,极大地简化了数据操作...

    hibernate many-to-many级联保存,级联更新,级联删除

    如果修改了Student或Course对象的关联关系,然后调用`session.update(student)`或`session.update(course)`,Hibernate会自动更新关联表中的记录,以反映新的关系状态。 六、级联删除 当调用`session.delete...

    hibernate-commons-annotations-5.0.1.Final.jar

    总结,`hibernate-commons-annotations-5.0.1.Final.jar`是Hibernate框架的重要组成部分,通过提供丰富的元数据注解,简化了Java对象与数据库之间的映射工作。对它的源码进行深入学习,不仅能够增强对JPA和Hibernate...

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip)

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    hibernate3.5.0-final下载链接

    Hibernate 是一个开源的对象关系映射(Object Relational Mapping,ORM)框架,它允许开发者将 Java 对象映射到数据库表,并支持多种数据库管理系统(Database Management Systems,DBMS)。Hibernate 3.5.0-Final ...

    hibernate-release-5.0.7.Final的所有jar包

    Hibernate是Java领域中一款著名的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库编程。在这个`hibernate-release-5.0.7.Final`版本中,包含了所有相关的jar包,为开发者...

    hibernate-release-5.0.0.Final(1).zip

    Hibernate,作为一个开源的对象关系映射(ORM)框架,自发布以来就深受Java开发者喜爱。本次我们将深入探讨的版本是`hibernate-release-5.0.0.Final(1)`,这个版本在Hibernate的生命周期中具有重要的地位,它引入了...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    Hibernate是Java领域内最受欢迎的对象关系映射(ORM)框架之一,它简化了Java应用程序与关系型数据库之间的交互,使得开发人员能够用面向对象的方式处理数据库操作,而无需深入了解SQL语法或数据库API。通过将Java...

    Hibernate ORM - 继承关联关系之union-subclass

    在Java世界中,ORM(Object-Relational Mapping)框架如Hibernate是将数据库关系模型与对象模型之间进行映射的关键工具,极大地简化了数据库操作。本文将深入探讨Hibernate ORM中的一个特定概念——继承关联关系的...

    hibernate-extensions和Middlegen-Hibernate

    在Java的持久化层开发中,Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,手动编写实体类和映射文件(hbm.xml)的过程仍需消耗大量时间。为了解决这一问题,两个工具——hibernate...

Global site tag (gtag.js) - Google Analytics