第3章Hibernate中基本的数据库操作实现.docVIP

第3章Hibernate中基本的数据库操作实现.doc

  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技术内幕——深入解析Hibernate架构设计与实现原理》第1章 PAGE 24 PAGE 23 PAGE 1 第3章 Hibernate中基本的数据库操作实现 3.1 概述 Hibernate主要是解决实体-关系映射问题的。这其中实体PO(Persistent Object)的持久化、数据库事务、对数据库的操作等都是在Session环境下完成的。但是Session不是线程安全的。同一个Session不能被多个线程使用,否则把会引起存取数据逻辑上的混乱。而SessionFactory是线程安全的,多个线程可以访问同一个SessionFactory,获取不同的Session从而保证了Hibernate的安全性。 3.2 持久化器EntityPersister EntityPersister类是用于实体的持久化的,我们称之为实体持久化器。它有数据库插入、更新与删除等功能。Hibernate给出了三个实现类:SingleTableEntityPersister、JoinedSubclassEntityPersister、UnionSubclassEntityPersister。其中SingleTableEntityPersister是对应的是单张表的持久化器。 3.2.1创建EntityPersister 实体持久化器是在创建SessionFactory时,Hibernate把为每一个实体关系映射建立一个实体持久化器实例,然后放入到一个Map中,以实体名为键名。以后就可以十分方便地根据实体名获得与之对应的持久器。如代码清单3-1所示。 代码清单3-1 创建EntityPersister EntityPersister cp = PersisterFactory.createClassPersister( model, accessStrategy, this, mapping ); entityPersisters.put( model.getEntityName(), cp ); 实体持久化器是是一个Class类。它可以在实体关系映像文件中指定。如在代码清单3-2中。这是一个为实体Student配置的实体关系映射文件。我们为它的class元素的persister属性指定了一个持久化器。这里指定的是“org.hibernate.persister.entity.SingleTableEntityPersister”。即是一个单表实体持久化器。指定了该属性后,PersisterFactory在为Student实体创建EntityPersister实例时,就为实体Student创建一个SingleTableEntityPersister类型的实体持久化器。 代码清单3-2 Student的实体关系映射文件 hibernate-mapping class name=org.st.pojo.Student table=student dynamic-insert=false catalog=hibernate persister=org.hibernate.persister.entity.SingleTableEntityPersister …… /class /hibernate-mapping 我们平时在配置实体关系映像文件时,很少为实体指定persister。那么,PersisterFactory把会为这些没有指定persister的实体创建什么样的EntityPersister呢?带着这样的问题我们去PersisterFactory中看看。在PeristerFactory中,创建EntityPersister 的方法是createClassPersister。如代码清单3-3粗体部分所示,我们可以看出当没有为一个实体指定persister时,PersisterFactory把会为它创建一个SingleTableEntityPersister,即单表持久化器。 码清单3-3 创建EntityPersister public static EntityPersister createClassPersister( PersistentClass model, EntityRegionAccessStrategy cacheAccessStrategy, SessionFactoryImplementor factory, Mapping cfg) throws HibernateException { Class persisterClass = model.getEntityPersisterClass(); if ( persisterClas

文档评论(0)

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

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

1亿VIP精品文档

相关文档