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
分享到:
相关推荐
在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-configuration-3.0.dtd`和`hibernate-mapping-3.0.dtd`是Hibernate 3.0版本中的两个核心文件,它们定义了...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)...
在开发过程中,IDE如Eclipse或IntelliJ IDEA提供了对Hibernate的集成支持,包括代码生成、对象关系图显示以及自动配置检查,这使得关系映射的设置更加直观和便捷。 六、最佳实践 1. 选择合适的集合类型:根据业务...
Hibernate对象关系映射一对多 很基础等文档
在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而Eclipse作为主流的Java集成开发环境,其丰富的插件生态使得开发效率得以提升。"hibernatetools-Update-4.1.1.Final_...
对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳...
在HibernateTools 3.2.4版本中,它包含了一系列的特性与插件,以支持更便捷地进行对象关系映射(ORM)管理和数据库交互。 一、Hibernate Tools的主要功能: 1. **逆向工程(Reverse Engineering)**:能够从现有的...
Hibernate是Java平台上的一款开源对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。在SSH(Spring、Struts、Hibernate)框架中,Hibernate作为持久层的解决方案,极大地简化了数据库操作的...
Hibernate Tools是开发者在使用Hibernate框架进行Java应用程序开发时的重要辅助工具,它为Eclipse IDE提供了强大的集成支持,包括对象关系映射(ORM)的可视化设计、逆向工程、数据库生成、HQL和SQL查询编辑等功能。...
《HibernateTools 3.2.4 Beta1:高效数据库管理和对象关系映射工具》 HibernateTools是Java开发者的重要辅助工具,它为Hibernate框架提供了一系列实用的集成开发环境(IDE)插件和命令行工具,极大地简化了数据操作...
如果修改了Student或Course对象的关联关系,然后调用`session.update(student)`或`session.update(course)`,Hibernate会自动更新关联表中的记录,以反映新的关系状态。 六、级联删除 当调用`session.delete...
总结,`hibernate-commons-annotations-5.0.1.Final.jar`是Hibernate框架的重要组成部分,通过提供丰富的元数据注解,简化了Java对象与数据库之间的映射工作。对它的源码进行深入学习,不仅能够增强对JPA和Hibernate...
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
Hibernate 是一个开源的对象关系映射(Object Relational Mapping,ORM)框架,它允许开发者将 Java 对象映射到数据库表,并支持多种数据库管理系统(Database Management Systems,DBMS)。Hibernate 3.5.0-Final ...
Hibernate是Java领域中一款著名的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库编程。在这个`hibernate-release-5.0.7.Final`版本中,包含了所有相关的jar包,为开发者...
Hibernate,作为一个开源的对象关系映射(ORM)框架,自发布以来就深受Java开发者喜爱。本次我们将深入探讨的版本是`hibernate-release-5.0.0.Final(1)`,这个版本在Hibernate的生命周期中具有重要的地位,它引入了...
Hibernate是Java领域内最受欢迎的对象关系映射(ORM)框架之一,它简化了Java应用程序与关系型数据库之间的交互,使得开发人员能够用面向对象的方式处理数据库操作,而无需深入了解SQL语法或数据库API。通过将Java...
在Java世界中,ORM(Object-Relational Mapping)框架如Hibernate是将数据库关系模型与对象模型之间进行映射的关键工具,极大地简化了数据库操作。本文将深入探讨Hibernate ORM中的一个特定概念——继承关联关系的...
在Java的持久化层开发中,Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,手动编写实体类和映射文件(hbm.xml)的过程仍需消耗大量时间。为了解决这一问题,两个工具——hibernate...