- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 2024年河北省石家庄市鹿泉市大河镇招聘社区工作者真题及参考答案详解一套.docx VIP
- (高清版)DB42∕T 949-2014 《蔬菜净菜加工和包装技术规范》.pdf VIP
- 建筑工程领域AI应用现状与趋势研究报告 -AI in AEC.docx
- 《智能制造技术基础》教案 项目三 认识智能制造设计技术.docx VIP
- 新能源全面入市是构建新型电力系统的重要支撑—136号文政策解读-13页.docx
- 口腔正畸工艺技术教案.docx VIP
- 《公路建设项目文件材料立卷归档管理办法》.doc VIP
- 企业安全生产风险辨识评估管控指导手册-散货码头.docx VIP
- 高压高含硫气井安全生产操作规程.pdf
- 食品经营许可知识测试题及答案(3篇).docx VIP
文档评论(0)