??xml version="1.0" encoding="utf-8" standalone="yes"?>黑人精品videos亚洲人,婷婷亚洲综合五月天小说在线 ,亚洲乱码一区二区三区在线观看 http://www.tkk7.com/kangdy/category/47811.html我就像AK47里打出去的子式V目标TMD永远在前斏V我只能TMD拼命向前?/description>zh-cnThu, 03 Nov 2011 03:32:21 GMTThu, 03 Nov 2011 03:32:21 GMT60Hibernate 实体对象的生命周期汇?/title><link>http://www.tkk7.com/kangdy/archive/2011/02/14/344265.html</link><dc:creator>AK47</dc:creator><author>AK47</author><pubDate>Mon, 14 Feb 2011 06:26:00 GMT</pubDate><guid>http://www.tkk7.com/kangdy/archive/2011/02/14/344265.html</guid><wfw:comment>http://www.tkk7.com/kangdy/comments/344265.html</wfw:comment><comments>http://www.tkk7.com/kangdy/archive/2011/02/14/344265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kangdy/comments/commentRss/344265.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kangdy/services/trackbacks/344265.html</trackback:ping><description><![CDATA[本帖汇M|上几篇关于hibernate的生命周期的帖子?br /> <br /> <fieldset><legend>转蝲Q?/legend> <p>实体对象的生命周期在Hibernate应用中是一个很关键的概?正确的理解实体对象的生命周期对我们应用Hibernate做持久层设计起到很大的作?而所谓的实体对象的生命周期就是指实体对象׃生到被GC回收的一D过E?在这q程中我们需要理解的是实体对象生命周期中的三种状?<br /> <br /> 1. 自由状?Transient)<br /> 所谓的Transient状?卛_体对象在内存中自由存?与数据库中的记录无关,通常是我们的J2EE?VO,q没有被U_Hibernate的实体管理容?</p> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">1</span><img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">    Test test </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Test();<br /> </span><span style="color: #008080;">2</span><span style="color: #000000;"><img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        test.setName(</span><span style="color: #000000;">"</span><span style="color: #000000;">energykk</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">3</span><span style="color: #000000;"><img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000;">//</span><span style="color: #008000;">此时的test对象处于Transient(自由状?q没有被Hibernate框架所理</span><span style="color: #008000;"><br /> </span><span style="color: #008080;">4</span><span style="color: #008000;"><img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">        </span></div> <br /> 2.持久状?Persistent)<br /> 何谓 Persistent? 卛_体对象已l处于被Hibernate实体理容器容器所理的状?q种状态下q个实体对象的引用将被纳入Hibernate实体理容器容器所理.<br /> 处于Persistent状态的实体对象,对它的变更也被固化到数据库?<br /> 在J2EE中通常指的是一个PO.<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">Transaction tr </span><span style="color: #000000;">=</span><span style="color: #000000;"> session.beginTransaction();<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        session.save(test);<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000;">//</span><span style="color: #008000;">此时的test对象已经处于Persistent(持久状?它被Hibernate U_实体理容器</span><span style="color: #008000;"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">        tr.commit();<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        Transaction tr2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> session.beginTransaction();<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        test.setName(</span><span style="color: #000000;">"</span><span style="color: #000000;">xukai</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000;">//</span><span style="color: #008000;">在这个事务中我们q没有显C的调用save()Ҏ但是׃Persistent状态的对象会自动的固化到<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000;">//</span><span style="color: #008000;">数据库中,因此此时正处在Persistent状态的test对象的变化也自动被同步到数据库?/span><span style="color: #008000;"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">        tr2.commit();</span></div> <p>处于Persistent状态的实体可以单的理解?如果一个实体对象与session发生了关?q且处于session的有效期?那么q个实体对象处于Persistent状?</p> <p>3.游离状?Detached)<br /> 处于Persistent状态的实体对象,其对应的session关闭以后,那么q个实体处?Detached状?<br /> 我们可以认ؓsession对象是一个Persistent的宿?一旦这个宿d?那么q个实体处?Detached状?<br /> </p> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">session.close();<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000;">//</span><span style="color: #008000;">与test对象兌的session被关?因此此时的test对象q入 Detached(游离状?</span><span style="color: #008000;"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">        <br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        session2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> HibernateSessionFactory.getSession();<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        Transaction tr3 </span><span style="color: #000000;">=</span><span style="color: #000000;"> session2.beginTransaction();<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        session2.update(test);<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000;">//</span><span style="color: #008000;">此时正处于Detached状态的test对象׃再次借助与session2被纳入到Hibernate的实体管理容器所以此时的<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000;">//</span><span style="color: #008000;">test对象恢复到Persistent状?/span><span style="color: #008000;"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">        test.setName(</span><span style="color: #000000;">"</span><span style="color: #000000;">jjjj</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        tr3.commit();<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        <br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        session2.close();</span></div> <br /> 既然Transient状态的实体与Detached状态的实体都与Hibernate的实体管理容器没有关p?那他们到底存在哪些差?<br /> 差异在于处于Transient状态的只有一个Name的属?此时的test对象所包含的数据信息仅限于?他与数据库中的记录没有Q何瓜?<br /> 但是处于Detached状态的实体已经不止包含Nameq个属?q被赋予了主键也是通常POJO里的id属?׃id是主?他可以确定数据库表中的一?br /> 唯一的记?那么自然的处于Detached状态的实体p与数据库表中拥有相同id的记录相兌.<br /> q就是他们之间所存在的差? 而言?Transient状态的实体~Z与数据库表记录之间的联系,而Detached状态的试题恰恰相反.只不q是q了sessionq个数据库操作^台而已.</fieldset>原帖地址 Q?<span style="color: #c0c0c0;"><u><a href="http://www.tkk7.com/energykk/archive/2007/05/08/115927.html">http://www.tkk7.com/energykk/archive/2007/05/08/115927.html</a><br /> </u></span><br />  生命周期图:<br /> 原图地址Q?span style="color: #c0c0c0;"><u><a >http://hi.baidu.com/quest2run/blog/item/39e1d08c7dbd45f4503d9222.html</a><br /> </u></span> <br /> <img alt="" src="http://www.tkk7.com/images/blogjava_net/kangdy/11.jpg.png" border="0" /><br /> persistence context<br /> <br /> <img alt="" src="http://www.tkk7.com/images/blogjava_net/kangdy/22.jpg.png" border="0" /><br /> <br /> 生命周期特征ȝ Q?br /> 原帖地址 Q?span style="color: #c0c0c0;"> <u><a >http://blog.csdn.net/hgd250/archive/2008/08/06/2775943.aspx</a><br /> </u></span><span><span><span><span style="color: #ccffcc;"><span style="color: #cc99ff;"><span style="color: #000000;"><span style="color: #000000;">TransientQ?/span> </span></span></span></span></span></span> <p><span style="color: red;"><span><span><span><span style="color: #99ccff;"><span style="color: #ccffcc;"><span style="color: #cc99ff;"><span style="color: #000000;">   <span style="color: #339966;"> 与数据库中的记录没有M关系,x有与其相兌的数据库记录.<br />     与session没有M关系.x有通过session对象的实例对其进行Q何持久化的操?br /> </span>PersistentQ?br />     <span style="color: red;"><span style="color: #339966;">每个persistent状态的实体对象都与一个session对象的实例相兌<br />     处于 Persistent状态的实体对象是与数据库中的记录相兌?<br />     Hibernate会依据persistent状态的实体对象的属性变化而改变数据库中相对应的记?/span>.<br /> </span>DetachedQ?br />     <span style="color: #339966;">游离态是由持久态实体对象{变而来?<br />     游离态实体不再与session对象相关?<br />     游离态实体对象与数据库中的记录没有直接联p?对其所做的M修改不会媄响到到数据库中的数据.<br />     游离态实体对象在数据库有相对应的数据记录,如果没有被其他事务删?</span></span></span></span></span></span></span></span></span></p><img src ="http://www.tkk7.com/kangdy/aggbug/344265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kangdy/" target="_blank">AK47</a> 2011-02-14 14:26 <a href="http://www.tkk7.com/kangdy/archive/2011/02/14/344265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ThreadLocal ?getCurrentSessionhttp://www.tkk7.com/kangdy/archive/2009/11/26/303772.htmlAK47AK47Thu, 26 Nov 2009 06:35:00 GMThttp://www.tkk7.com/kangdy/archive/2009/11/26/303772.htmlhttp://www.tkk7.com/kangdy/comments/303772.htmlhttp://www.tkk7.com/kangdy/archive/2009/11/26/303772.html#Feedback0http://www.tkk7.com/kangdy/comments/commentRss/303772.htmlhttp://www.tkk7.com/kangdy/services/trackbacks/303772.html看了下面的文章才d明白了ThreadLocal ?getCurrentSession的关p?br /> http://hi.baidu.com/%B7%C7%D4%C2%CE%DE%D0%C4/blog/item/8b14b8db49b40961d1164e54.html

引用 :

1 getCurrentSession创徏的session会和l定到当前线E?而openSession不会?/p>

2 getCurrentSession创徏的线E会在事务回滚或事物提交后自动关?而openSession必须手动关闭

q里getCurrentSession本地事务(本地事务:jdbc)?要在配置文g里进行如下设|?/p>

 * 如果使用的是本地事务Qjdbc事务Q?br />  <property name="hibernate.current_session_context_class">thread</property>
 * 如果使用的是全局事务Qjta事务Q?br />  <property name="hibernate.current_session_context_class">jta</property>

getCurrentSession () 使用当前的session
openSession()         重新建立一个新的session

在一个应用程序中Q如果DAO 层用Spring 的hibernate 模板Q通过Spring 来控制session 的生命周期,则首选getCurrentSession ()?/p>

使用Hibernate的大多数应用E序需要某UŞ式的“上下文相关的” sessionQ特定的session在整个特定的上下文范围内始终有效。然而,对不同类型的应用E序而言Q要Z么是l成q种“上下?#8221;下一个定义通常是困隄Q不同的上下文对“当前”q个概念定义了不同的范围?span style="color: #ff0000;">?.0版本之前Q用Hibernate的程序要么采用自行编写的Z ThreadLocal的上下文sessionQ要么采用HibernateUtilq样的辅助类Q要么采用第三方框架Q比如Spring或Pico)Q它们提供了Z代理(proxy)或者基于拦截器(interception)的上下文相关session?/span>?.0.1版本开始,Hibernate增加了SessionFactory.getCurrentSession()Ҏ?/span>一开始,它假定了采用JTA事务QJTA事务定义了当前session的范围和上下?scope and context)。Hibernate开发团队坚信,因ؓ有好几个独立的JTA TransactionManager实现E_可用Q不论是否被部vC个J2EE容器中,大多?假若不是所有的Q应用程序都应该采用JTA事务理。基于这一点,采用JTA的上下文相关session可以满你一切需要?/p>

更好的是Q从3.1开始,SessionFactory.getCurrentSession()的后台实现是可拔插的。因此,我们引入了新的扩展接?(org.hibernate.context.CurrentSessionContext)和新的配|参?(hibernate.current_session_context_class)Q以便对什么是“当前session”的范围和上下?scope and context)的定义进行拔插?/p>

请参?org.hibernate.context.CurrentSessionContext接口的Javadoc,那里有关于它的契U的详细讨论。它定义了单一的方法,currentSession()Q特定的实现用它来负责跟t当前的上下文session。Hibernate内置了此接口的两U实现?/p>

org.hibernate.context.JTASessionContext - 当前sessionҎJTA来跟t和界定。这和以前的仅支持JTA的方法是完全一L。详情请参阅Javadoc?/p>

org.hibernate.context.ThreadLocalSessionContext - 当前session通过当前执行的线E来跟踪和界定。详情也请参阅Javadoc?/p>

q两U实现都提供?#8220;每数据库事务对应一个session”的编E模型,也称作每ơ请求一个session。Hibernate session的v始和l结由数据库事务的生存来控制。假若你采用自行~写代码来管理事务(比如Q在Ua的J2SE,或?JTA/UserTransaction/BMTQ,你用Hibernate Transaction API来把底层事务实现从你的代码中隐藏掉。如果你在支持CMT的EJB容器中执行,事务边界是声明式定义的,你不需要在代码中进行Q何事务或 session理操作。请参阅W?11 ?事务和ƈ发一节来阅读更多的内容和CZ代码?/p>

hibernate.current_session_context_class 配置参数定义了应该采用哪个org.hibernate.context.CurrentSessionContext实现。注意,Z向下兼容Q如果未配置此参敎ͼ但是存在org.hibernate.transaction.TransactionManagerLookup的配|,Hibernate会采用org.hibernate.context.JTASessionContext。一般而言Q此参数的值指明了要用的实现cȝ全名Q但那两个内|的实现可以使用写,?jta"?thread"?/p>

1、getCurrentSession()与openSession()的区别?

* 采用getCurrentSession()创徏的session会绑定到当前U程中,而采用openSession()
创徏的session则不?br /> * 采用getCurrentSession()创徏的session在commit或rollback时会自动关闭Q而采用openSession()
创徏的session必须手动关闭
2、用getCurrentSession()需要在hibernate.cfg.xml文g中加入如下配|:
* 如果使用的是本地事务Qjdbc事务Q?br /> <property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务Qjta事务Q?br /> <property name="hibernate.current_session_context_class">jta</property>

利于ThreadLocal模式理Session
   早在Java1.2推出之时QJavaq_中就引入了一个新的支持:java.lang.ThreadLocalQ给我们在编写多U程E序
   时提供了一U新的选择。ThreadLocal是什么呢Q其实ThreadLocalq是一个线E的本地实现版本Q它q不是一个ThreadQ?br />    而是thread local variable(U程局部变?。也许把它命名ؓThreadLocalVar更加合适。线E局部变?ThreadLocal)
   其实的功用非常简单,是为每一个用某变量的线E都提供一个该变量值的副本Q是每一个线E都可以独立地改变自q副本Q?br />    而不会和其它U程的副本冲H。从U程的角度看Q就好像每一个线E都完全拥有一个该变量?br />    ThreadLocal是如何做Cؓ每一个线E维护变量的副本的呢Q其实实现的思\很简单,在ThreadLocalcM有一个MapQ?br />    用于存储每一个线E的变量的副本。比如下面的CZ实现(Z单,没有考虑集合的泛?Q?br /> public class HibernateUtil {

public static final ThreadLocal session =new ThreadLocal();

public static final SessionFactory sessionFactory;
   static {
      try {
        sessionFactory = new Configuration().configure().buildSessionFactory();
      } catch (Throwable ex) {
           throw new ExceptionInInitializerError(ex);
      }   
}

     public static Session currentSession() throws HibernateException {
        Session s = session.get();
        if(s == null) {
          s = sessionFactory.openSession();
          session.set(s);
           }
         return s;
       }

    public static void closeSession() throws HibernateException {
           Session s = session.get();
        if(s != null) {
            s.close();
        }
        session.set(null);
    }
}

原来一切都是那么简单?br />



AK47 2009-11-26 14:35 发表评论
]]>
Hibernate的缓存机?/title><link>http://www.tkk7.com/kangdy/archive/2009/11/18/302794.html</link><dc:creator>AK47</dc:creator><author>AK47</author><pubDate>Wed, 18 Nov 2009 06:12:00 GMT</pubDate><guid>http://www.tkk7.com/kangdy/archive/2009/11/18/302794.html</guid><wfw:comment>http://www.tkk7.com/kangdy/comments/302794.html</wfw:comment><comments>http://www.tkk7.com/kangdy/archive/2009/11/18/302794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kangdy/comments/commentRss/302794.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kangdy/services/trackbacks/302794.html</trackback:ping><description><![CDATA[|上扑ֈ一些关于hibernate~存的文?个h觉得很不?整合了一?<br /> <a >http://www.javaresearch.org/article/53556.htm</a>  Hibernate的缓存机?br /> <fieldset><legend>引用 :</legend>        ~存是介于应用程序和物理数据源之_其作用是Z降低应用E序对物理数据源讉K的频ơ,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复Ӟ应用E序在运行时从缓存读写数据,在特定的时刻或事件会同步~存和物理数据源的数据?br />         ~存的介质一般是内存Q所以读写速度很快。但如果~存中存攄数据量非常大Ӟ也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,q要考虑到管理缓存的q发讉K和缓存数据的生命周期?br /> <br /> Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分ؓ两类Q内|缓存和外置~存。Session的缓存是内置的,不能被卸载,也被UCؓHibernate的第一U缓存。SessionFactory的内|缓存和 Session的缓存在实现方式上比较相|前者是SessionFactory对象的一些集合属性包含的数据Q后者是指Session的一些集合属性包含的数据。SessionFactory的内|缓存中存放了映元数据和预定义SQL语句Q映元数据是映文件中数据的拷贝,而预定义SQL语句是在 Hibernate初始化阶D|据映元数据推导出来QSessionFactory的内|缓存是只读的,应用E序不能修改~存中的映射元数据和预定?SQL语句Q因此SessionFactory不需要进行内|缓存与映射文g的同步。SessionFactory的外|缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用q个插g。外|缓存的数据是数据库数据的拷贝,外置~存的介质可以是内存或者硬盘?SessionFactory的外|缓存也被称为Hibernate的第二~存?br /> <br /> Hibernate的这两~存都位于持久化层,存放的都是数据库数据的拷贝,那么它们之间的区别是什么呢Qؓ了理解二者的区别Q需要深入理解持久化层的~存的两个特性:~存的范围和~存的ƈ发访问策略?br /> <br /> 持久化层的缓存的范围<br /> <br /> ~存的范围决定了~存的生命周期以及可以被谁访问。缓存的范围分ؓ三类?br /> <br /> 1 事务范围Q缓存只能被当前事务讉K。缓存的生命周期依赖于事务的生命周期Q当事务l束Ӟ~存也就l束生命周期。在此范围下Q缓存的介质是内存。事务可以是数据库事务或者应用事务,每个事务都有独自的缓存,~存内的数据通常采用怺兌的的对象形式?br /> <br /> 2 q程范围Q缓存被q程内的所有事务共享。这些事务有可能是ƈ发访问缓存,因此必须对缓存采取必要的事务隔离机制。缓存的生命周期依赖于进E的生命周期Q进E结束时Q缓存也q束了生命周期。进E范围的~存可能会存攑֤量的数据Q所以存攄介质可以是内存或盘。缓存内的数据既可以是相互关联的对象形式也可以是对象的松散数据Ş式。松散的对象数据形式有点cM于对象的序列化数据,但是对象分解为松散的法比对象序列化的算法要求更快?br /> <br /> 3 集群范围Q在集群环境中,~存被一个机器或者多个机器的q程׃n。缓存中的数据被复制到集环境中的每个进E节点,q程间通过q程通信来保证缓存中的数据的一致性,~存中的数据通常采用对象的松散数据Ş式?br /> <br /> 对大多数应用来说Q应该慎重地考虑是否需要用集范围的~存Q因问的速度不一定会比直接访问数据库数据的速度快多?br /> <br /> 持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,q可以到q程范围或集范围的~存内查询,如果q是没有查到Q那么只有到数据库中查询。事务范围的~存是持久化层的W一U缓存,通常它是必需的;q程范围或集范围的~存是持久化层的W二U缓存,通常是可选的?br /> <br /> 持久化层的缓存的q发讉K{略<br /> <br /> 当多个ƈ发的事务同时讉K持久化层的缓存的相同数据Ӟ会引起ƈ发问题,必须采用必要的事务隔L施?br /> <br /> 在进E范围或集群范围的缓存,即第二~存Q会出现q发问题。因此可以设定以下四U类型的q发讉K{略Q每一U策略对应一U事务隔ȝ别?br /> <br /> 事务型:仅仅在受理环境中适用。它提供了Repeatable Read事务隔离U别。对于经常被M很少修改的数据,可以采用q种隔离cdQ因为它可以防止脏读和不可重复读q类的ƈ发问题?br /> <br /> d型:提供了Read Committed事务隔离U别。仅仅在非集的环境中适用。对于经常被M很少修改的数据,可以采用q种隔离cdQ因为它可以防止脏读q类的ƈ发问题?br /> <br /> 非严D写型Q不保证~存与数据库中数据的一致性。如果存在两个事务同时访问缓存中相同数据的可能,必须数据配置一个很短的数据q期旉Q从而尽量避免脏诅R对于极被修改Qƈ且允许偶脏ȝ数据Q可以采用这Uƈ发访问策略?nbsp;  只读型:对于从来不会修改的数据,如参考数据,可以使用q种q发讉K{略?br /> <br /> 事务型ƈ发访问策略是事务隔离U别最高,只读型的隔离U别最低。事务隔ȝ别越高,q发性能p低?br /> <br /> 什么样的数据适合存放到第二~存中?<br /> <br /> 1、很被修改的数?nbsp;<br /> <br /> 2、不是很重要的数据,允许出现偶尔q发的数?br /> <br /> 3、不会被q发讉K的数?br /> <br /> 4、参考数?br /> <br /> 不适合存放到第二~存的数据?<br /> <br /> 1、经常被修改的数?br /> <br /> 2、胦务数据,l对不允许出现ƈ?br /> <br /> 3、与其他应用׃n的数据?br /> <br /> Hibernate的二U缓?br /> <br /> 如前所qͼHibernate提供了两U缓存,W一U是Session的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的~存是事务范围的~存。第一U缓存是必需的,不允许而且事实上也无法比卸除。在W一U缓存中Q持久化cȝ每个实例都具有唯一的OID?br /> <br /> W二U缓存是一个可插拔的的~存插gQ它是由SessionFactory负责理。由于SessionFactory对象的生命周期和应用E序的整个过E对应,因此W二U缓存是q程范围或者集范围的~存。这个缓存中存放的对象的松散数据。第二对象有可能出现ƈ发问题,因此需要采用适当的ƈ发访问策略,该策略ؓ被缓存的数据提供了事务隔ȝ别。缓存适配器用于把具体的缓存实现Y件与Hibernate集成。第二~存是可选的Q可以在每个cL每个集合的粒度上配置W二U缓存?br /> <br /> Hibernate的二U缓存策略的一般过E如下:<br /> <br /> 1) 条g查询的时候,L发出一条select * from table_name where …. Q选择所有字D)q样的SQL语句查询数据库,一ơ获得所有的数据对象?nbsp;<br /> <br /> 2) 把获得的所有数据对象根据ID攑օ到第二~存中?nbsp;<br /> <br /> 3) 当HibernateҎID讉K数据对象的时候,首先从Session一U缓存中查;查不刎ͼ如果配置了二U缓存,那么从二U缓存中查;查不刎ͼ再查询数据库Q把l果按照ID攑օ到缓存?nbsp;<br /> <br /> 4) 删除、更新、增加数据的时候,同时更新~存?br /> <br /> Hibernate的二U缓存策略,是针对于ID查询的缓存策略,对于条g查询则毫无作用。ؓ此,Hibernate提供了针Ҏ件查询的Query~存?br /> <br /> Hibernate的Query~存{略的过E如下: <br /> <br /> 1) Hibernate首先Ҏq些信息l成一个Query KeyQQuery Key包括条g查询的请求一般信息:SQL, SQL需要的参数Q记录范_起始位置rowStartQ最大记录个数maxRows)Q等?nbsp;<br /> <br /> 2) HibernateҎq个Query Key到Query~存中查扑֯应的l果列表。如果存在,那么q回q个l果列表Q如果不存在Q查询数据库Q获取结果列表,把整个结果列表根据Query Key攑օ到Query~存中?nbsp;<br /> <br /> 3) Query Key中的SQL涉及C些表名,如果q些表的M数据发生修改、删除、增加等操作Q这些相关的Query Key都要从缓存中清空 </fieldset><br /> <a >http://www.javaeye.com/topic/249465</a> Hibernate~存机制<br /> <br /> <fieldset><legend>引用 :</legend><span style="color: red;">  <span id="4iqm88u" class="hilite1">Hibernate</span>的缓存管?/span> <br /> <br /> <span style="color: blue;">  一U缓存的理:</span> <br /> <br />       <span style="color: red;">evit(Object obj)</span>  指定的持久化对象从一U缓存中清除,释放对象所占用的内存资?指定对象从持久化状态变状?从而成为游d? <br />       <span style="color: red;">clear()</span>  一U缓存中的所有持久化对象清除,释放其占用的内存资源 <br />       <span style="color: red;">contains(Object obj) </span>判断指定的对象是否存在于一U缓存中. <br />       <span style="color: red;">flush() </span>h一U缓存区的内?使之与数据库数据保持同步. <br /> <br />   <span style="color: blue;">二~存的管?</span> <br />    <br /> <span style="color: red;">      evict(Class arg0, Serializable arg1)</span>  某个类的指定ID的持久化对象从二U缓存中清除,释放对象所占用的资? <br /> <br /> <span id="iwk48ug" class="hilite1">      Hibernate</span>的二U缓存功能是靠配|二U缓存插件来实现?<span id="84uoceg" class="hilite1">Hibernate</span>Z集成q些插g,<span id="o4uc4sa" class="hilite1">Hibernate</span>提供了org.<span id="84gqwqc" class="hilite1">hibernate</span>.cache.CacheProvider借口,它充当缓存插件与<span id="6aowk4e" class="hilite1">Hibernate</span>之间的适配?. <br /> <br /> 常用的二U缓存插?<br /> EHCache  org.<span id="a6wyske" class="hilite1">hibernate</span>.cache.EhCacheProvider <br /> OSCache  org.<span id="icok8i4" class="hilite1">hibernate</span>.cache.OSCacheProvider <br /> SwarmCahe  org.<span id="8y44su4" class="hilite1">hibernate</span>.cache.SwarmCacheProvider <br /> JBossCache  org.<span id="e4kk4au" class="hilite1">hibernate</span>.cache.TreeCacheProvider <br /> <br /> 单介l一下EHCache的配|?br /> hibernate.cfg.xml<br /> <fieldset><legend>Xml代码: </legend><hibernate-configuration><br />     <session-factory><br />        <!-- 讄二~存插gEHCache的Providerc?-><br />        <property name="hibernate.cache.provider_class"><br />           org.hibernate.cache.EhCacheProvider<br />        </property><br />        <!-- 启动"查询~存" --><br />        <property name="hibernate.cache.use_query_cache"><br />           true<br />        </property><br />     </session-factory><br />   </hibernate-configuration></fieldset>ehcache.xml<br /> <fieldset><legend>Xml代码:</legend><ehcache><br />   <!-- maxElementsInMemory为缓存对象的最大数? eternal讄是否永远不过?timeToIdleSeconds对象处于I闲状态的最多秒?timeToLiveSeconds对象处于~存状态的最多秒?--><br />   <diskStore path="java.io.tmpdir"/><br />     <defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/><br /> </ehcache></fieldset>****.hbm.xml<br /> <fieldset><legend>Xml代码:</legend> <p><?xml version="1.0" encoding='UTF-8'?><br /> <!DOCTYPE hibernate-mapping PUBLIC<br />                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />                             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" ></p> <p><hibernate-mapping><br />      <br />    <class><br />        <!-- 讄该持久化cȝ二~存q发讉K{略 read-only read-write nonstrict-read-write transactional--><br />        <cache usage="read-write"/>    <br />    </class></p> <p></hibernate-mapping></p> </fieldset><br /> </fieldset><br /> <img src ="http://www.tkk7.com/kangdy/aggbug/302794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kangdy/" target="_blank">AK47</a> 2009-11-18 14:12 <a href="http://www.tkk7.com/kangdy/archive/2009/11/18/302794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://dsfv1.com" target="_blank">91Ƶ91</a>| <a href="http://8654123.com" target="_blank">91Ƶ</a>| <a href="http://rbthy.com" target="_blank">޾Ʒ</a>| <a href="http://fennenll.com" target="_blank">½޾Ʒ</a>| <a href="http://yiren2233.com" target="_blank">˾ƷƵ</a>| <a href="http://pohezi.com" target="_blank">ŷۺһ</a>| <a href="http://www-34595.com" target="_blank">պƷѵӰ</a>| <a href="http://zbsensor.com" target="_blank">ܲƵ</a>| <a href="http://aiwoqi.com" target="_blank">޵һ߹ۿ</a>| <a href="http://yy1288.com" target="_blank">ƷѦvƵ</a>| <a href="http://55118885.com" target="_blank">lƷ߹ۿ</a>| <a href="http://www-44455588.com" target="_blank">aƵ߹ۿ</a>| <a href="http://aiqingdao999.com" target="_blank">Ļɫͼ</a>| <a href="http://kimnote.com" target="_blank">ƷѲ</a>| <a href="http://www-282555.com" target="_blank">ɫٸŮ11p</a>| <a href="http://hnmeiankj.com" target="_blank">ѹʵj߹ۿ</a>| <a href="http://0769wwt.com" target="_blank">www.avѹۿ</a>| <a href="http://326h.com" target="_blank">ޱר</a>| <a href="http://jldledu.com" target="_blank">vaƷѹۿ</a>| <a href="http://fl6fe.com" target="_blank">۹һ</a>| <a href="http://xcdys.com" target="_blank">һƷ</a>| <a href="http://xxxck.com" target="_blank">99߹߲ѹۿ</a>| <a href="http://pgyadv.com" target="_blank">޹Ƶ</a>| <a href="http://gisdn.com" target="_blank">þþþAV</a>| <a href="http://igdytt.com" target="_blank">Ƶѹۿ</a>| <a href="http://benjiebf.com" target="_blank">ҹ޾Ʒ</a>| <a href="http://www-ttyx.com" target="_blank">޾ƷӰԺ</a>| <a href="http://4794d.com" target="_blank">ëƬ벥 </a>| <a href="http://zmnhssn.com" target="_blank">vѹۿ</a>| <a href="http://caoliusq1024.com" target="_blank">˿appַios</a>| <a href="http://haidiaori.com" target="_blank">avպav</a>| <a href="http://ulihix.com" target="_blank">鶹˾Ʒ</a>| <a href="http://d3q4.com" target="_blank">Ļһ</a>| <a href="http://www-9970.com" target="_blank">ۺɫɫ</a>| <a href="http://dasheng178.com" target="_blank">ִӲëƬ</a>| <a href="http://h588888.com" target="_blank">þþþѿӰƬ</a>| <a href="http://ghdc5.com" target="_blank">һ</a>| <a href="http://77663499.com" target="_blank">޴߶ר</a>| <a href="http://kouchoubao.com" target="_blank">պ߸</a>| <a href="http://www-7479.com" target="_blank">ˬִ̼վֱ</a>| <a href="http://zjtuntex.com" target="_blank">˳ɫ99999߹ۿ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>