欢迎来到天天文库
浏览记录
ID:38811291
大小:257.78 KB
页数:26页
时间:2019-06-19
《零点起飞学JavaWeb开发之Hibernate的体系结构及接口x》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第14章Hibernate结构分析Hibernate作为一个数据持续层组件,在Web应用程序中占据着非常重要的地位。它对JDBC接口进行了封装,将数据库表和JavaBean对象对应起来,从而提供给程序员操作数据库的接口。通过本章的学习,读者可以全面地掌握Hibernate的配置及其接口的使用方法,并且能够在实际开发中熟练地使用这些接口。14.1Hibernate体系结构一览Hibernate可以分为不同的模块,每个模块完成特定的功能。它们结合在一起去完成Hibernate的功能。了解Hibernate的体系结构对学习它也是非常重要的。其体系结构如图所示。14.2Hib
2、ernate实体对象的生命周期Hibernate是完整的对象/关系映射解决方案。使用Hibernate开发者不必考虑SQL语句的执行,这部分内容由Hibernate处理,开发者只需要关注JavaBean对象的状态(state)。Hibernate提供了对象状态管理(statemanagement)的功能,使开发者不再需要理会底层数据库系统的细节。Hibernate实体对象可以分为3种状态,下面分别介绍。14.2.1瞬态(Transient)由new操作符创建,且尚未与HibernateSession关联的对象被认定为瞬时(Transient)的。瞬时(Transien
3、t)对象和数据库的记录没有任何联系,因而也不会被赋予持久化标识(identifier)。在应用程序中,如果没有保持对瞬时(Transient)对象的引用,它会被垃圾回收器(garbagecollector)销毁。14.2.2持久态(Persistent)一旦一个处于瞬时状态的对象和session相关联,它就转换为持久态(Persistent)。持久的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。持久(Persistent)的实例可能是刚被保存(save)到数据库的,或者是刚从数据库加载(load)的。在与该session断开连接之前,Hib
4、ernate会检测到处于持久(Persistent)状态的对象的任何改动,并且在当前操作单元(unitofwork)执行完毕时将对象中的数据与数据库的相关记录同步。14.2.3游离态(Detached)一旦与持久(Persistent)对象关联的session被关闭后,对象就变为脱管(Detached)的。在托管期间,该对象可继续被修改。如果脱管(Detached)对象被重新关联到某个session上,会再次转变为持久(Persistent)的,这时在脱管期间的任何改动都会被保存到数据库中。14.2.4实体对象的状态转换在程序中,一个对象的状态总是在不断改变,正因为这
5、样,才能实现对数据库的操作。Hibernate提供了很多方法去实现状态转变,下面对常用的状态转变情况进行分析。1.使对象持久化一个通过new操作符创建的对象是瞬态的。将一个瞬态对象与一个session相关联,就可以实现该对象的持久化。2.装载对象装载对象一般使用如下所示的两个函数。load():如果知道一个对象的标识(identifier),则就可以使用session的load()方法来获取它。load()的另一个参数是指定类的class对象。该方法会创建指定类的持久化实例,并从数据库加载其数据。3.查询如果不知道对象的标识(identifier),但是知道该对象其他
6、属性的值,则可以使用查询方式获取该对象。Hibernate支持强大且易于使用的面向对象的查询语言(HQL),使用该语言可以通过操作JavaBean来操作数据库。HQL查询要通过org.hibernate.Query的实例来表达。4.修改持久对象在一个对象处于持久态时,程序员对该对象属性的更改在session被刷出(flushed)时会被更新到数据库对应的记录中。所以这里不需要调用某个特定的方法(例如update(),设计该方法有另外的目的)将修改持久化。所以最直接的更新一个对象的方法就是在session处于打开状态时load()它,然后直接修改即可。5.修改脱管(De
7、tached)对象在Web应用中,经常是先通过一个session获取一个持久化对象,然后该session被销毁,并把此时处于Detached状态的对象发送到界面层去操作。最后在一个新的session中保存所做的修改。对于这种情况,Hibernate提供了两个方法保存数据。Session.update():使用update()方法可以将对持久化对象的更改保存到数据库中。下面通过一个例子来讲解如何使用这个方法。6.使用saveOrUpdate()方法saveorUpdate()方法即可自动分配新持久化标识(identifier)保存瞬时(transien
此文档下载收益归作者所有