??xml version="1.0" encoding="utf-8" standalone="yes"?>视频一区在线视频,亚洲日本伦理,日韩精品中文字幕一区二区http://www.aygfsteel.com/michaellee/category/38542.htmljava人生?..MichaelLeezh-cnWed, 25 Mar 2009 16:23:08 GMTWed, 25 Mar 2009 16:23:08 GMT60hibernate持久层操?/title><link>http://www.aygfsteel.com/michaellee/articles/261976.html</link><dc:creator>MichaelLee</dc:creator><author>MichaelLee</author><pubDate>Wed, 25 Mar 2009 16:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/michaellee/articles/261976.html</guid><wfw:comment>http://www.aygfsteel.com/michaellee/comments/261976.html</wfw:comment><comments>http://www.aygfsteel.com/michaellee/articles/261976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/michaellee/comments/commentRss/261976.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/michaellee/services/trackbacks/261976.html</trackback:ping><description><![CDATA[Session.get/load的区别:<br />       1.如果未能发现W合条g的记录,getҎ(gu)q回nullQ而loadҎ(gu)会抛Z个ObejctNotFoundException?br />       2.LoadҎ(gu)可返回实体的代理cȝ型,而getҎ(gu)永远直接q回实体cR?br />       3.LoadҎ(gu)可以充分利用内部~存和二U缓存中现有数据Q而getҎ(gu)则仅仅在内部~存中进行数据查找,如没有发现对应数据,越q二U缓存,直接调用SQL完成数据d? <p> </p> <p> </p> <hr /> <br />       Session.find/iterate的区别:<br />       findҎ(gu)执行Select SQL从数据库中获得所有符合条件的记录q构造相应的实体对象Q实体对象构建完毕之后,将其纳入缓存。它对缓存只写不读,因此无法利用~存?br />       iterateҎ(gu)首先执行一条Select SQL以获得所有符合查询条件的数据idQ随卻IiterateҎ(gu)首先在本地缓存中Ҏ(gu)id查找对应的实体对象是否存在,如果~存中已l存在对应的数据Q则直接以此数据对象作ؓ查询l果Q如果没有找刎ͼ再执行相应的Select语句获得对应的库表记录(iterateҎ(gu)如果执行了数据库d操作q构Z完整的数据对象,也会其查询l果U_~存Q? <p> </p> <p> </p> <hr /> <br />       Query Cache产生作用的情况:<br />       1.完全相同的Select SQL重复执行?br />       2.在两ơ查询之_此Select SQL对应的库表没有发生过改变? <p> </p> <p> </p> <hr /> <br />       Session.saveҎ(gu)的执行步骤:<br />       1.在Session内部~存中寻扑־保存对象。内部缓存命中,则认为此数据已经保存Q执行过insert操作Q,实体对象已经处于Persistent状态,直接q回?br />       2.如果实体cdClifecycle接口Q则调用待保存对象的onSaveҎ(gu)?br />       3.如果实体cdCvalidatable接口Q则调用其validate()Ҏ(gu)?br />       4.调用对应拦截器的Interceptor.onSaveҎ(gu)Q如果有的话Q?br />       5.构造Insert SQLQƈ加以执行?br />       6.记录插入成功Quser.id属性被讑֮为insert操作q回的新记录id倹{?br />       7.user对象攑օ内部~存?br />       8.最后,如果存在U联关系Q对U联关系q行递归处理? <p> </p> <p> </p> <hr /> <br />       Session.updateҎ(gu)的执行步骤:<br />       1.Ҏ(gu)待更新实体对象的KeyQ在当前session的内部缓存中q行查找Q如果发玎ͼ则认为当前实体对象已l处于Persistent状态,q回?br />       2.初始化实体对象的状态信息(作ؓ之后脏数据检查的依据Q,q将其纳入内部缓存。注意这里Session.updateҎ(gu)本nq没有发送Update SQL完成数据更新操作QUpdate SQL在之后的Session.flushҎ(gu)中执行(Transaction.commit在真正提交数据库事务之前会调用Session.flushQ? <p> </p> <p> </p> <hr /> <p> </p> <p>      Session.saveOrUpdateҎ(gu)的执行步骤:<br />       1.首先在Session内部~存中进行查找,如果发现则直接返回?br />       2.执行实体cd应的Interceptor.isUnsavedҎ(gu)Q如果有的话Q,判断对象是否为未保存状态?br />       3.Ҏ(gu)unsaved-value判断对象是否处于未保存状态?br />       4.如果对象未保存(Transient状态)Q则调用saveҎ(gu)保存对象?br />       5.如果对象为已保存QDetached状态)Q调用updateҎ(gu)对象与Session重新兌?/p> <img src ="http://www.aygfsteel.com/michaellee/aggbug/261976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/michaellee/" target="_blank">MichaelLee</a> 2009-03-26 00:09 <a href="http://www.aygfsteel.com/michaellee/articles/261976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate实体对象生命周期Transient/Persistent/Detachedhttp://www.aygfsteel.com/michaellee/articles/261975.htmlMichaelLeeMichaelLeeWed, 25 Mar 2009 16:08:00 GMThttp://www.aygfsteel.com/michaellee/articles/261975.htmlhttp://www.aygfsteel.com/michaellee/comments/261975.htmlhttp://www.aygfsteel.com/michaellee/articles/261975.html#Feedback0http://www.aygfsteel.com/michaellee/comments/commentRss/261975.htmlhttp://www.aygfsteel.com/michaellee/services/trackbacks/261975.html       1.TransientQ自q态)
      此时的实体对象和数据库中的记录无兌Q只是一个普通的JavaBean?br />       2.PersistentQ持久状态)
      此时的实体对象和数据库中的记录有兌Q其变更由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所理的状态?br />       3.DetachedQ游ȝ态)
      处于Persistent状态的对象Q其对应的Session实例关闭之后Q那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象?br />
      从实体对象是否被U_Hibernate实体理容器的角度,Transient和Detached状态的实体对象可以l称为VOQValue ObjectQ,而被理的实体对象称为POQPersistent ObjectQ。两者的区别Q?br />       1.VO是相对独立的实体对象Q处于非理状态?br />       2.PO是HibernateU_其实体管理容器(Entity MapQ的对象Q它代表了与数据库中某条记录对应的Hibernate实体QPO的变化在事务提交时将反映到实际数据库中?br />       3.如果一个PO与其对应的Session实例分离Q那么此Ӟ它又会变成一个VO?br />
      下图是我ȝ实体对象生命周期的状态{换图Q?br />
vopolife.JPG

MichaelLee 2009-03-26 00:08 发表评论
]]>
hibernate实体对象生命周期Transient/Persistent/Detachedhttp://www.aygfsteel.com/michaellee/articles/261973.htmlMichaelLeeMichaelLeeWed, 25 Mar 2009 16:04:00 GMThttp://www.aygfsteel.com/michaellee/articles/261973.htmlhttp://www.aygfsteel.com/michaellee/comments/261973.htmlhttp://www.aygfsteel.com/michaellee/articles/261973.html#Feedback0http://www.aygfsteel.com/michaellee/comments/commentRss/261973.htmlhttp://www.aygfsteel.com/michaellee/services/trackbacks/261973.html       1.TransientQ自q态)
      此时的实体对象和数据库中的记录无兌Q只是一个普通的JavaBean?br />       2.PersistentQ持久状态)
      此时的实体对象和数据库中的记录有兌Q其变更由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所理的状态?br />       3.DetachedQ游ȝ态)
      处于Persistent状态的对象Q其对应的Session实例关闭之后Q那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象?br />
      从实体对象是否被U_Hibernate实体理容器的角度,Transient和Detached状态的实体对象可以l称为VOQValue ObjectQ,而被理的实体对象称为POQPersistent ObjectQ。两者的区别Q?br />       1.VO是相对独立的实体对象Q处于非理状态?br />       2.PO是HibernateU_其实体管理容器(Entity MapQ的对象Q它代表了与数据库中某条记录对应的Hibernate实体QPO的变化在事务提交时将反映到实际数据库中?br />       3.如果一个PO与其对应的Session实例分离Q那么此Ӟ它又会变成一个VO?br />
      下图是我ȝ实体对象生命周期的状态{换图Q?br />
vopolife.JPG

MichaelLee 2009-03-26 00:04 发表评论
]]>
վ֩ģ壺 | | | | ڶ| ̨| | ǹ| ʷ| Դ| | | | | | | | Զ| | | Ǩ| ԭ| ƽ| ߷| | ɽ| | | | | ˫| | | ʷ| ɽ| Ű| Ī| غ| ʡ| | Ļ|