对象的几种状态

[align=center][size=x-large][color=red][b]对象的几种状态[/b][/color][/size][/align]


[img]http://dl.iteye.com/upload/attachment/0074/6148/8010277e-4aa9-3a7f-9e0b-6399dda7cf54.jpg[/img]

[size=medium][b][color=green]1.Transient[/color][/b][/size]
刚new一个对象在内存中

[size=medium][color=green][b]2.Persistent[/b][/color][/size]
内存中有new 对象
缓存里Session中的HashMap<key,value>里 value的值就是该对象,如果commit,缓存里的session就没有了
数据库里有
public void testUpdate4() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher)session.get(Teacher.class, 1); //session调用get之前是Transient状态,调用get之后t对象处于Persistent状态
t.setName("新名字1");
session.getTransaction().commit(); //session结束事务时,发现name与数据库中name值不一致时,会调用Update修改数据库
t.setName("新名字2"); //此时的t对象处于Detached状态

}


[size=medium][color=green][b]3.Detached[/b][/color][/size]
内存里有
数据库里有


[size=medium][color=red][b]Hibernate实体对象的三种状态?[/b][/color][/size]

瞬时状态(Transient):当一个”对象”没有与数据库中的数据发生关系(即在数据库中是找不到的)与”数据库中”的数据没有了--<关联>;?

持久状态(Persistent):对象属于Session管理的就为持久化对象;对象属于Session管理的就为持久化对象;

游离状态(Detached):当session关闭后,对象不受session管理了,但该对象,在数据库
中是有关联,则认为是游离的;


[size=medium][color=darkred][b]三种状态之间的转变:[/b][/color][/size]

在以下情况下,Java对象进入[color=red]临时状态[/color]:
(1) 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。
(2) Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录; 对于持久化对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。

Session的许多方法都能够触发Java对象进入[color=red]持久化状态[/color]:
(1) Session的save()方法把临时对象转变为持久化对象。
(2) Session的load()或get()方法返回的对象总是处于持久化状态。
(3) Session的find()方法返回的List集合中存放的都是持久化对象。
(4) Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
(5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时
会把这个临时对象也转变为持久化对象。

Session的以下方法使[color=red]持久化对象[/color]转变为[color=red]游离对象[/color]:
(1)游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。
(2)Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保存了大量的持久化对 象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。但是多数情况下不推荐使用evict()方法,而应该通过查询语言,或者显式的导航来控制对象图的深度。
(3)Session调用close方法或者session.getTransaction().commit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值