hibernate 对象状态.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
hibernate 对象状态

域对象在持久化层的三种状态教学内容Session的缓存的作用Session清理缓存的时间点对象的临时状态、持久化状态和游离状态用Session的update()方法使游离对象转变为持久化对象理解Session的缓存1.当Session的save()方法持久化一个Customer对象时,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中。2.当Session的load()方法试图从数据库中加载一个Customer对象时,Session先判断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检索。理解Session的缓存tx = session.beginTransaction();Customer c1=new Customer(Tom,newHashSet());//Customer对象被持久化,并且加入到Session的缓存中session.save(c1); Long id=c1.getId();//c1变量不再引用Customer对象c1=null; //从Session缓存中读取Customer对象,使c2变量引用Customer对象Customer c2=(Customer)session.load(Customer.class,id); mit();//关闭Session,清空缓存session.close();//访问Customer对象System.out.println(c2.getName());// c2变量不再引用Customer对象,此时Customer对象结束生命周期。c2=null;tx = session.beginTransaction();Customer c1=(Customer)session.load(Customer.class,new Long(1)); Customer c2=(Customer)session.load(Customer.class,new Long(1)); System.out.println(c1==c2);mit();session.close();Session的缓存的作用(1)减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。(2)保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。Session清理缓存清理缓存是指按照缓存中对象的状态的变化来同步更新数据库以下程序代码对Customer的name属性修改了两次:tx = session.beginTransaction();Customer customer=(Customer)session.load(Customer.class,new Long(1));customer.setName(Jack);customer.setName(Mike);mit();当Session清理缓存时,只需执行一条update语句:update CUSTOMERS set NAME= Mike…… where ID=1;清理缓存的时间点Session会在下面的时间点清理缓存:当应用程序调用net.sf.hibernate.Transaction的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。当应用程序调用Session的get()或者iterate()时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。当应用程序显式调用Session的flush()方法的时候。Hibernate的二级缓存结构1.Hibernate提供了两级缓存,第一级缓存是Session的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必须的,不允许而且事实上也无法被卸除。在第一级缓存中,持久化类的每个实例都具有惟一的OID。第二级缓存是一个可插拔的缓存插件,它由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围或群集范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。Hibernate的二级缓存机制1.如

文档评论(0)

wf93679 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档