`
学会做人
  • 浏览: 118727 次
  • 性别: 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 对象关系映射总结hibernate 对象关系映射总结

    hibernate 对象关系映射总结hibernate 对象关系映射总结hibernate 对象关系映射总结

    Hibernate对象关系映射

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

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

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

    《精通Hibernate》学习-对象关系映射基础.zip

    《精通Hibernate》学习-对象关系映射基础.zip

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

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

    对象/关系映射

    对象/关系映射 —Hibernate 对象/关系映射 —Hibernate 对象/关系映射 —Hibernate

    hibernate对象关系映射实例

    关于hibernate对象关系映射的实例,适合初学者,对应关系有一对一,多对一,多对多

    免费开源-Hibernate 的核心对象/关系映射功能

    Hibernate ORM 是一个强大的 Java 对象/关系映射解决方案,可以轻松地为应用程序、库和框架开发持久性逻辑。 Hibernate 实现了 JPA,即 Java 中对象/关系持久性的标准 API,而且还提供了一组超出规范的广泛功能和 ...

    Hibernate 对象关系映射

    本人在厦门邦初培训时候用的ppt 快速入门文档 内容: 建立一对多的关联关系域模型 建立一对多的参照关系的模型 映射一对多关联关系 通过hibernateAPI级联操作关联对象 其它关系的映射:一对一,多对多

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

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

    hibernate映射解析—七种映射关系

    首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  ...

    hibernate-prj1

    1、Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于把对象模型 表示的对象映射到基于 SQL 的关系模型数据结构中去,采用完全面向对象的 方式来操作数据库; 2、Hibernate 的主要作用是简化应用的数据...

    hibernate对象关系映射案例demo

    在研究对象关系映射的时候经常会用到hibernate框架,这里给出了hibernate框架的案例,通过小的案例来展示对象关系映射技术的应用。

    开源对象关系映射框架Hibernate知识培训

    开源对象关系映射框架Hibernate知识培训开源对象关系映射框架Hibernate知识培训

    hibernate-release-5.4.9.Final.zip

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以...

    Hibernate源码(hibernate-orm-main.zip)

    Hibernate源码(hibernate-orm-main.zip)Source Code: Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。 它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    hibernate-release-5.4.9.Final+5.1.2.Final.rar

    资源有5.4.9和5.1.2两个Hibernate,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,...

    Hibernate ORM 对象关联关系映射初解

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1205496

    hibernate3.5.6-final

    hibernate_百度百科 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Global site tag (gtag.js) - Google Analytics