- 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 ———持久化对象 持久化对象 持久化层的Java对象可处于哪些状态?这些状态有哪些特征? 当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用变量引用它,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收。对于需要被持久化的Java对象,在它的生命周期中,可处于以下三个状态之一: (1) 瞬时状态(临时状态)(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。 (2) 持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。 (3) 游离状态(脱管状态)(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。 持久化对象 临时对象的特征 临时对象具有以下特征: (1) 不处于Session的缓存中,也可以说,不被任何一个Session实例关联。 (2) 在数据库中没有对应的记录。 在以下情况下,Java对象进入临时状态: (1) 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。 (2) Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久化对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。 持久化对象 持久化对象具有以下特征: (1) 位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联。 (2) 持久化对象和数据库中的相关记录对应。 (3) Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。 Session的许多方法都能够触发Java对象进入持久化状态: (1) Session的save()方法把临时对象转变为持久化对象。 (2) Session的load()或get()方法返回的对象总是处于持久化状态。 (3) Session的find()方法返回的List集合中存放的都是持久化对象。 (4) reference的说法当试图用update更新一个持久化Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。(nate注:更新hibernate对象时会抛异常) (5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。 持久化对象 游离对象的特征 游离对象具有以下特征: (1) 不再位于Session的缓存中,也可以说,游离对象不被Session关联。 (2) 游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。 游离对象与临时对象的相同之处在于,两者都不被Session关联,因此Hibernate不会保证它们的属性变化与数据库保持同步。游离对象与临时对象的区别在于:前者是由持久化对象转 变过来的,因此可能在数据库中还存在对应的记录,而后者在数据库中没有对应的记录。 持久化对象 Session的以下方法使持久化对象转变为游离对象: (1) 当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。 (2)Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保存了大量的持久化对象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。但是多数情况下不推荐使用evict()方法,而应该通过查询语言控制对象图的深度 状态迁移图 主键生成策略 主键生成策略是指 generator class=native/ 1、 native 对于 oracle 采用 Sequence 方式,对于MySQL 和 SQL Server 采用identity(自增主键生成机制),native就是将主键
文档评论(0)