#
这是精通Hibernate一书中 的一段代码,对应着它提到几遍的话:
值得注意的是,Session只有在清理缓存的时候的才执行delete语句。——————这句很OK
此外,只有当调用Session的close()方法时,才会从Session的缓存中删除该对象。——————这句作何解?
后者作何解?有啥用?
如果按照上述所说,那岂不是commit之后session.close()之前
我再load这个已经提交数据库的删除了的obj 还可以load到?这个不是有点荒唐么?
这个应该就是hibernate对象的三种状态么。。Transient Persistent Detached
[quote]那岂不是commit之后session.close()之前
我再load这个已经提交数据库的删除了的obj 还可以load到?这个不是有点荒唐么?[/quote]
看一下对象的生命周期吧
http://cczakai.iteye.com/blog/966116
http://www.blogjava.net/energykk/archive/2007/05/08/115927.html
删掉之后就已经是持久态了。。,从数据库里load不到了,虽然你对象引用还在。。。
他这个是告诉你 数据的 当前的状态形式。这是为了方式脏数据之类的。当你做删除操作 的时候 是先在 缓存区中进行删除。并不是完全同步于数据库中。只有conmmit 之后才是真正的删除。进行提交事务 处理。
我是这么理解的。也可能不对,仅供参考。自己写个代码验证下。
你commit后这个持久化对象变成瞬时对象,从数据库中移除它的持久化状态。Session的close()方法时,才会从Session的缓存中删除该对象。因为当你commit后还可以进行回滚操作,所以在close()时才会彻底将缓存中的对象清除
针对的缓存不同吧,第一个是一级缓存,第二是二级缓存吧。 关掉Session时,处理一下二级缓存的数据。