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 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳...
《精通Hibernate》学习-对象关系映射基础.zip
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
对象/关系映射 —Hibernate 对象/关系映射 —Hibernate 对象/关系映射 —Hibernate
关于hibernate对象关系映射的实例,适合初学者,对应关系有一对一,多对一,多对多
Hibernate ORM 是一个强大的 Java 对象/关系映射解决方案,可以轻松地为应用程序、库和框架开发持久性逻辑。 Hibernate 实现了 JPA,即 Java 中对象/关系持久性的标准 API,而且还提供了一组超出规范的广泛功能和 ...
本人在厦门邦初培训时候用的ppt 快速入门文档 内容: 建立一对多的关联关系域模型 建立一对多的参照关系的模型 映射一对多关联关系 通过hibernateAPI级联操作关联对象 其它关系的映射:一对一,多对多
Hibernate稳定版(hibernate-release-5.5.8.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的...
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简介 ...
1、Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于把对象模型 表示的对象映射到基于 SQL 的关系模型数据结构中去,采用完全面向对象的 方式来操作数据库; 2、Hibernate 的主要作用是简化应用的数据...
在研究对象关系映射的时候经常会用到hibernate框架,这里给出了hibernate框架的案例,通过小的案例来展示对象关系映射技术的应用。
开源对象关系映射框架Hibernate知识培训开源对象关系映射框架Hibernate知识培训
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以...
Hibernate源码(hibernate-orm-main.zip)Source Code: Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。 它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
资源有5.4.9和5.1.2两个Hibernate,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,...
NULL 博文链接:https://dreamzhong.iteye.com/blog/1205496
hibernate_百度百科 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。