浅谈对象在Hibernate中的三种状态.doc

浅谈对象在Hibernate中的三种状态.doc

ID:51795015

大小:64.00 KB

页数:4页

时间:2020-03-15

浅谈对象在Hibernate中的三种状态.doc_第1页
浅谈对象在Hibernate中的三种状态.doc_第2页
浅谈对象在Hibernate中的三种状态.doc_第3页
浅谈对象在Hibernate中的三种状态.doc_第4页
资源描述:

《浅谈对象在Hibernate中的三种状态.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、浅谈对象在Hibernate中的三种状态一.瞬时状态(Transient)  由new命令开辟内存空间的Java对象,也就是平时所熟悉的普通Java对象。如:Studentstu=newStudent();  瞬时对象特点:1.不和Session实例关联2.在数据库中没有和瞬时对象关联的记录  二.持久状态(Persistent)  持久的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。  持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在Tr

2、ansaction终止,也就是执行commit()之后,才在数据库中真正运行SQL进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏(dirty)对象。  瞬时对象转为持久对象的方法:1.通过Session的save()和saveOrUpdate()方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。2.使用fine(),get(),load()和iterater()待方法查询到的数据对象,将成为持久化对象。  持久化对象的特点:1.和Session实例关联2.在数据库中有和持久对象关联的记录  三.脱管状态(Deta

3、ched)  与持久对象关联的Session被关闭后,对象就变为脱管对象。对脱管对象的引用依然有效,对象可继续被修改。  脱管对象特点:1.本质上和瞬时对象相同1.只是比爱瞬时对象多了一个数据库记录标识值id  持久对象转为脱管对象的方法:  当执行close()或clear()、evict()之后,持久对象会变为脱管对象。  瞬时对象转为持久对象的方法:  通过Session的update()、saveOrUpdate()和lock()等方法,把脱管对象变为持久对象。  三种对象的转换图:   四.结合save()、update()、saveOrUp

4、date()方法说明对象的状态  1Save()方法将瞬时对象保存到数据库,对象的临时状态将变为持久化状态。当对象在持久化状态时,它一直位于Session的缓存中,对它的任何操作在事务提交时都将同步到数据库,因此,对一个已经持久的对象调用save()或update()方法是没有意义的。如:Studentstu=newStrudnet();stu.setCarId(“200234567”);stu.setId(“100”);//打开Session,开启事务session.save(stu);stu.setCardId(“20076548”);sessio

5、n.save(stu);//无效session.update(stu);//无效//提交事务,关闭Session  2update()方法两种用途重新关联脱管对象为持久化状态对象,显示调用update()以更新对象。调用update()只为了关联一个脱管对象到持久状态,当对象已经是持久状态时,调用update()就没有多大意义了。如://打开session,开启事务stu=(Student)session.get(Student.class,”123456”);stu.setName(“Body”);session.update(stu);//由于st

6、u是持久对象,必然位于Session缓冲中,对stu所做的变更将//被同步到数据库中。所以update()是没有意义的,可以不要这句效果一样的。//提交事务,关闭Session  Hibernate总是执行update语句,不管这个脱管对象在离开Session之后有没有更改过,在清理缓存时Hibernate总是发送一条update语句,以确保脱管对象和数据库记录的数据一致,如:Studentstu=newStrudnet();stu.setCarId(“1234”);//打开Session1,开启事务session1.save(stu);//提交事务,

7、关闭Session1stu.set(“4567”);//对脱管对象进行更改//打开Session2,开启事务session2.update(stu);//提交事务,关闭Session2注:即使把session2.update(stu);这句去掉,提交事务时仍然会执行一条update()语句。  如果希望只有脱管对象改变了,Hibernate才生成update语句,可以把映射文件中标签的select-before-update设为true,这种会先发送一条select语句取得数据库中的值,判断值是否相同,如果相同就不执行update语句。不

8、过这种做法有一定的缺点,每次update语句之前总是要发送一条多余的select语句,影响性能

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。