下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java对象三状态当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用变量引用它,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收。对于需要被持久化的Java对象,在它的生命周期中,可处于以下三个状态之一:(1 临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。(2 持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。(3 游离状态(detached):已经被持久化,但不再处于Se
2、ssion的缓存中。处于游离状态的Java对象被称为游离对象。图1为Java对象的完整状态转换图,Session的特定方法触发Java对象由一个状态转换到另一个状态。从图1看出,当Java 对象处于临时状态或游离状态,只要不被任何变量引用,就会结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收;当处于持久化状态,由于 Session的缓存会引用它,因此它始终处于生命周期中。临时对象的特征临时对象具有以下特征:(1 不处于Session的缓存中,也可以说,不被任何一个Session实例关联。(2 在数据库中没有对应的记录。 在以下情况下,Java对象进入临时状态:(1 当通过new语句刚创
3、建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。(2 Session的delete(方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete(方法从数据库中删除与它对应的记录; 对于持久化对象,delete(方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。持久化对象的特征持久化对象具有以下特征:(1 位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联。(2 持久化对象和数据库中的相关记录对应。(3 Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。Session的许多方
4、法都能够触发Java对象进入持久化状态:(1 Session的save(方法把临时对象转变为持久化对象。(2 Session的load(或get(方法返回的对象总是处于持久化状态。(3 Session的find(方法返回的List集合中存放的都是持久化对象。(4 Session的update(、saveOrUpdate(和lock(方法使游离对象转变为持久化对象。(5当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。 Hibernate保证在同一个Session实例的缓存中,数据库表中的每条记录只对应惟一的持久化对象。例如对
5、于以下代码,共创建了两个 Session实例:session1和session2。session1和session2拥有各自的缓存。在session1的缓存中,只会有惟一 的OID为1的Customer持久化对象,在session2的缓存中,也只会有惟一的OID为1的Customer持久化对象。因此在内存中共有两个 Customer持久化对象,一个属于session1的缓存,一个属于session2的缓存。引用变量a和b都引用session1缓存中的 Customer持久化对象,而引用变量c引用session2缓存中的Customer持久化对象:Session session1=session
6、Factory.openSession(;Session session2 =sessionFactory.openSession(;Transaction tx1 = session1.beginTransaction(;Transaction tx2 = session2.beginTransaction(;Customer a=(Customersession1.load(Customer.class,new Long(1; Customer b=(Customersession1.load(Customer.class,new Long(1; Customer c=(Customers
7、ession2.load(Customer.class,new Long(1; System.out.println(a= =b; /trueSystem.out.println(a= =c; /falsemit(;mit(;session1.close(;session2.close(;Java对象的持久化状态是相对于某个具体的Session实例的,以下代码试图使一个Java对象同时被两个Session实例关联:Session session1=sessionFactory.openSession(;Session session2=sessionFactory.openSession(;T
8、ransaction tx1 = session1.beginTransaction(;Transaction tx2 = session2.beginTransaction(;Customer c=(Customersession1.load(Customer.class,new Long(1; /Customer对象被session1关联session2.update(c; /Customer对象被session2关联c.setName("Jack" /修改Customer对象的属性mit(; /执行update语句mit(; /执行update语句session1.c
9、lose(;session2.close(;当执行session1的load(方法时,OID为1的Customer对象被加入到session1的缓存中,因此它是 session1的持久化对象,此时它还没有被session2关联,因此相对于session2,它处于游离状态。当执行session2的 update(方法时,Customer对象被加入到session2的缓存中,因此也成为session2的持久化对象。接下来修改Customer 对象的name属性,会导致两个Session实例在清理各自的缓存时,都执行相同的update语句:update CUSTOMERS set NAME='
10、;Jack' where ID=1;在实际应用程序中,应该避免一个Java对象同时被多个Session实例关联,因为这会导致重复执行SQL语句,并且极容易出现一些并发问题。游离对象的特征游离对象具有以下特征:(1 不再位于Session的缓存中,也可以说,游离对象不被Session关联。(2 游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。游离对象与临时对象的相同之处在于,两者都不被Session关联,因此Hibernate不会保证它们的属性变化与数据库保持同步。游离对象与临时对象 的区别在于:前者是由持久化对象转变过来的,因此可能在数据库中还存在对应的记录,而后者在数据库中没有对应的记录。 Session的以下方法使持久化对象转变为游离对象:(1 当调用Session的close(方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。(2S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年江苏农林职业技术学院单招职业倾向性测试模拟测试卷附答案解析
- 2023年辽宁工程职业学院单招职业技能考试模拟测试卷附答案解析
- 2024年重庆交通职业学院单招职业技能测试模拟测试卷附答案解析
- 2025年阜阳职业技术学院单招职业技能考试模拟测试卷附答案解析
- 2025年山东力明科技职业学院单招职业技能考试题库附答案解析
- 2026年上半年北京市中小学教师资格考试(笔试)备考题库及答案(夺冠)
- 2025年兰州航空职业技术学院单招职业技能测试模拟测试卷附答案解析
- 2025年黔南民族医学高等专科学校单招职业适应性考试模拟测试卷附答案解析
- 2025年四川建筑职业技术学院单招职业适应性考试题库附答案解析
- 2023年湖北三峡职业技术学院单招职业适应性考试题库附答案解析
- 2025天津大学管理岗位集中招聘15人笔试备考重点题库及答案解析
- 2026年人教版(2024)初中美术七年级上册期末综合测试卷及答案(四套)
- 供应饭菜应急预案(3篇)
- 2026年辽宁理工职业大学单招职业适应性测试题库及参考答案详解
- 2026苏州大学附属第二医院(核工业总医院)护理人员招聘100人(公共基础知识)测试题带答案解析
- 2026中国储备粮管理集团有限公司湖北分公司招聘33人笔试历年题库及答案解析(夺冠)
- 《马原》期末复习资料
- 食品生产企业GMP培训大纲
- 《图形创意与应用》全套教学课件
- 科研成果评审专家意见模板
- 工程教育国际化路径-洞察及研究
评论
0/150
提交评论