- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对象的持久生命周期 持久类和一般类只有概念上的区别,从代码上看没有区别,持久类不知道自己的持久状态,所有的业务逻辑也与对象是在内存中还是在数据库中无关。 内存中的对象只有两种状态:有用和无用。 Hibernate通过session来控制对象的持久生命周期:transient,persistent, detached. Transient objects new生成的对象称为Transient,它没有与数据库中的某一行记录关联,一旦它被dereferenced就会被JVM回收。 hibernate认为所有的transient对象都是非事务的,hibernate不提供对这些对象的回滚支持。 仅仅被transient对象reference的对象也是transient对象。 Persistent objects persistent对象对应数据库的一条记录,并且具有database identity。 对于transient对象,调用session.save()可以将其转变为persistent object。如果通过session.load()加载一个对象,该对象也是persistent状态。 hibernate对persistent对象提供与数据库的同步支持和事务支持。 与数据库的同步 脏数据:数据仅仅在内存中更新而没有同步到数据库中称为脏数据。 hibernate会监测脏数据,在尽可能迟的时候做同步的动作。(transparent transaction-level write-behind) hibernate可以做到仅仅更新有变动的属性,但是需要在映射文件中设置dynamic-update=“true”,默认是false。这个功能用手工很难完成。 Detached objects 当调用session.close(),原先的persistent object就转化为detached object。 detached object和数据库失去了联系,但是它们不是transient object,它们具有datebase identity。 hibernate可以在新的事务中重新联系detached object。这样可以在多个层面中传递这些持久对象。对于多层架构的设计产生重大影响。 例子——1 例子——2 例子——3 对象的状态图 区分transient and detached对象 Identifier属性是否为null 对于非对象类型的Identifier,判断unsaved-value的值 优先考虑使用对象类型的Identifier,因为对象可以为null。 该方法只对synthetic keys有效,对于assigned keys和composite keys无效。 The scope of object identity no identity scope:数据的同一性没有范围,同一条记录分别取两次,返回的对象不满足a==b; transaction-scoped identity:在同一个事务中,同一条记录取两次,满足a==b,在事务级别需要缓存; Process-scoped identity:在同一个进程中只有一个对象被返回,范围达到整个JVM。 对象树 通常大型应用中操作的不可能只有一个对象,而是一个对象图。 Persistence by reachability compute被持久化时,它所reference的任何对象都被持久化,但是不包括“Electronics” 和 “Cell Phones”。 这是一个递归的过程。 在理想的环境中:root对象被加载,那么整个对象树在任何时候都可以被重新建立。如果某一个对象是非reachable的,那么就应该成为transient。 不可能的任务 数据库没有root的概念,只有foreign key。 Java有垃圾回收的算法,而数据库没有。 如果数据库要实现一个类似的,需要做全表扫描,那时不现实的。 对象图只是数据库的一部份。 persistence by reachability只解决了一半问题,如何完成persistence - transient。 解决之道—Cascade none:默认设置,hibernate不做级联任何动作。 save-update:如果item被持久化,那么所有被item所reference的bid都应该被持久化。 delete:如果item被删除,那么item所reference的bid的被删除。 all:= save-update + delete delete-orphan:如果Item所属的Bid Set中的某个Bit被删除, 那么数据库中Bid也被删除. 目 录 持久层的概念及必要性 hibernate框架及核心类介
您可能关注的文档
最近下载
- 西门子828D数控梯形图程序备份.docx VIP
- 年处理50万吨硫石膏改扩建项目环境影响报告表.pdf VIP
- 广安市岳池县2024年下半年“小平故里英才计划”引进急需紧缺专业人才笔试备考试题及答案解析.docx VIP
- 《Git使用培训》PPT课件.pptx VIP
- 《《GBT1804-2016(ISO2768)公差标准》.doc VIP
- 前交叉韧带重建术后康复训练.pptx VIP
- 《机器学习模型评估》课件.ppt VIP
- 知识点专题09 口语交际 (讲义+试题) 一升二年级语文(含答案)部编版.docx VIP
- 小学语文_《我想对您说》教学设计学情分析教材分析课后反思.doc VIP
- 会计实习心得.docx VIP
有哪些信誉好的足球投注网站
文档评论(0)