⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transactions.html

📁 hibernate的一点学习资料!
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html><head>      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">   <title>Chapter&nbsp;17.&nbsp;&#20107;&#21153;&#21644;&#24182;&#34892;&#65288;Transactions And Concurrency&#65289;</title><link rel="stylesheet" href="../styles/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.60.1"><link rel="home" href="index.html" title="HIBERNATE - &#31526;&#21512;Java&#20064;&#24815;&#30340;&#20851;&#31995;&#25968;&#25454;&#24211;&#25345;&#20037;&#21270;"><link rel="up" href="index.html" title="HIBERNATE - &#31526;&#21512;Java&#20064;&#24815;&#30340;&#20851;&#31995;&#25968;&#25454;&#24211;&#25345;&#20037;&#21270;"><link rel="previous" href="inheritance.html" title="Chapter&nbsp;16.&nbsp;&#32487;&#25215;&#26144;&#23556;(Inheritance Mappings)"><link rel="next" href="examples.html" title="Chapter&nbsp;18.&nbsp;&#26144;&#23556;&#23454;&#20363;(Mapping Examples)"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;17.&nbsp;&#20107;&#21153;&#21644;&#24182;&#34892;&#65288;Transactions And Concurrency&#65289;</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="inheritance.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="examples.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="transactions"></a>Chapter&nbsp;17.&nbsp;&#20107;&#21153;&#21644;&#24182;&#34892;&#65288;Transactions And Concurrency&#65289;</h2></div></div><div></div></div><p>        Hibernate&#26412;&#36523;&#24182;&#19981;&#26159;&#25968;&#25454;&#24211;&#65292;&#23427;&#21482;&#26159;&#19968;&#20010;&#36731;&#37327;&#32423;&#30340;&#23545;&#35937;&#65293;&#20851;&#31995;&#25968;&#25454;&#24211;&#26144;&#23556;&#65288;object-relational&#65289;&#24037;&#20855;&#12290;&#23427;&#30340;&#20107;&#21153;&#20132;&#30001;&#24213;&#23618;&#30340;&#25968;&#25454;&#24211;&#36830;&#25509;&#31649;&#29702;&#65292;&#22914;&#26524;&#25968;&#25454;&#24211;&#36830;&#25509;&#26377;JTA&#30340;&#25903;&#25345;&#65292;&#37027;&#20040;&#22312;<tt class="literal">Session</tt>&#20013;&#36827;&#34892;&#30340;&#25805;&#20316;&#23558;&#26159;&#25972;&#20010;&#21407;&#23376;&#24615;JTA&#20107;&#21153;&#30340;&#19968;&#37096;&#20998;&#12290;Hibernate&#21487;&#20197;&#30475;&#20316;&#26159;&#28155;&#21152;&#20102;&#38754;&#21521;&#23545;&#35937;&#35821;&#20041;&#30340;JDBC&#30246;&#36866;&#37197;&#22120;&#65288;thin adapter&#65289;&#12290;    </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="transactions-s1"></a>17.1.&nbsp;&#37197;&#32622;&#65292;&#20250;&#35805;&#21644;&#24037;&#21378;&#65288;Configurations, Sessions and Factories&#65289;</h2></div></div><div></div></div><p>	    <tt class="literal">SessionFactory</tt>&#30340;&#21019;&#24314;&#38656;&#35201;&#32791;&#36153;&#22823;&#37327;&#36164;&#28304;&#65292;&#23427;&#26159;&#32447;&#31243;&#23433;&#20840;&#65288;threadsafe&#65289;&#30340;&#23545;&#35937;&#65292;&#22312;&#24212;&#29992;&#20013;&#23427;&#34987;&#25152;&#26377;&#32447;&#31243;&#20849;&#20139;&#12290;&#32780;<tt class="literal">Session</tt>&#30340;&#21019;&#24314;&#32791;&#36153;&#36164;&#28304;&#24456;&#23569;&#65292;&#23427;&#19981;&#26159;&#32447;&#31243;&#23433;&#20840;&#30340;&#23545;&#35937;&#65292;&#23545;&#20110;&#19968;&#20010;&#31616;&#21333;&#21830;&#19994;&#36807;&#31243;&#65288;business process&#65289;&#65292;&#23427;&#24212;&#35813;&#21482;&#34987;&#20351;&#29992;&#19968;&#27425;&#65292;&#28982;&#21518;&#34987;&#20002;&#24323;&#12290;&#20030;&#20363;&#26469;&#35828;&#65292;&#24403;Hibernate&#22312;&#22522;&#20110;servlet&#30340;&#24212;&#29992;&#20013;&#65292;servlet&#33021;&#22815;&#20197;&#19979;&#38754;&#30340;&#26041;&#24335;&#24471;&#21040;<tt class="literal">SessionFactory</tt>&#12290;	</p><pre class="programlisting">SessionFactory sf = (SessionFactory)getServletContext().getAttribute("my.session.factory");</pre><p>	    &#27599;&#27425;&#35843;&#29992;SessionFactory&#30340;service&#26041;&#27861;&#33021;&#22815;&#29983;&#25104;&#19968;&#20010;&#26032;&#30340;<tt class="literal">Session</tt>&#23545;&#35937;&#65292;&#28982;&#21518;&#35843;&#29992;Session&#30340;<tt class="literal">flush()</tt>&#65292;&#35843;&#29992;<tt class="literal">commit()</tt>&#25552;&#20132;&#23427;&#30340;&#36830;&#25509;&#65292;&#35843;&#29992;<tt class="literal">close()</tt>&#20851;&#38381;&#23427;&#65292;&#26368;&#32456;&#20002;&#24323;&#23427;&#12290;	</p><p>	    &#22312;&#26080;&#29366;&#24577;&#30340;session bean&#20013;&#65292;&#21487;&#20197;&#21516;&#26679;&#20351;&#29992;&#31867;&#20284;&#30340;&#26041;&#27861;&#12290;bean&#22312;<tt class="literal">setSessionContext()</tt>&#20013;&#24471;&#21040;<tt class="literal">SessionFactory</tt>&#30340;&#23454;&#20363;&#65292;&#27599;&#20010;&#21830;&#19994;&#26041;&#27861;&#20250;&#29983;&#25104;&#19968;&#20010;<tt class="literal">Session</tt>&#23545;&#35937;&#65292;&#35843;&#29992;&#23427;&#30340;<tt class="literal">flush()</tt>&#21644;<tt class="literal">close()</tt>&#65292;&#24403;&#28982;&#65292;&#24212;&#29992;&#19981;&#24212;&#35813;<tt class="literal">commit()</tt>connection. (&#25226;&#23427;&#30041;&#32473;JTA.)	</p><p>	    &#36825;&#37324;&#38656;&#35201;&#29702;&#35299;<tt class="literal">flush()</tt>&#30340;&#21547;&#20041;&#12290;	    <tt class="literal">flush()</tt>&#23558;&#25345;&#20037;&#21270;&#23384;&#20648;&#19982;&#20869;&#23384;&#20013;&#30340;&#21464;&#21270;&#36827;&#34892;&#21516;&#27493;&#65292;&#20294;<span class="emphasis"><em>&#19981;&#26159;</em></span>&#23558;&#20869;&#23384;&#30340;&#21464;&#21270;&#19982;&#25345;&#20037;&#21270;&#23384;&#20648;&#36827;&#34892;&#21516;&#27493;&#12290;&#25152;&#20197;&#22312;&#35843;&#29992;<tt class="literal">flush()</tt>&#24182;&#25509;&#30528;&#35843;&#29992;<tt class="literal">commit()</tt>&#20851;&#38381;&#36830;&#25509;&#26102;&#65292;&#20250;&#35805;&#23558;&#20173;&#28982;&#21547;&#26377;&#36807;&#26102;&#30340;&#25968;&#25454;&#65292;&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#32487;&#32493;&#20351;&#29992;&#20250;&#35805;&#30340;<span class="emphasis"><em>&#21807;&#19968;</em></span>&#30340;&#26041;&#27861;&#26159;&#23558;&#20250;&#35805;&#20013;&#30340;&#25968;&#25454;&#36827;&#34892;&#29256;&#26412;&#21270;&#12290;	</p><p>	    &#25509;&#19979;&#26469;&#30340;&#20960;&#23567;&#33410;&#23558;&#35752;&#35770;&#21033;&#29992;&#29256;&#26412;&#21270;&#30340;&#26041;&#27861;&#26469;&#30830;&#20445;&#20107;&#21153;&#21407;&#23376;&#24615;&#65292;&#36825;&#20123;&#8220;&#39640;&#32423;&#8221;&#26041;&#27861;&#38656;&#35201;&#23567;&#24515;&#20351;&#29992;&#12290;	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="transactions-s2"></a>17.2.&nbsp;&#32447;&#31243;&#21644;&#36830;&#25509;&#65288;Threads and connections&#65289;</h2></div></div><div></div></div><p>            You should observe the following practices when creating Hibernate Sessions:        </p><p>	    &#22312;&#21019;&#24314;Hibernate&#20250;&#35805;&#65288;Session&#65289;&#26102;&#65292;&#20320;&#24212;&#35813;&#30041;&#24847;&#20197;&#19979;&#30340;&#23454;&#36341;&#65288;practices&#65289;&#65306;	</p><div class="itemizedlist"><ul type="disc" compact><li><p>		    &#23545;&#20110;&#19968;&#20010;&#25968;&#25454;&#24211;&#36830;&#25509;&#65292;&#19981;&#35201;&#21019;&#24314;&#19968;&#20010;&#20197;&#19978;&#30340;<tt class="literal">Session</tt>&#25110;<tt class="literal">Transaction</tt>		</p></li><li><p>		    &#22312;&#23545;&#20110;&#19968;&#20010;&#25968;&#25454;&#24211;&#36830;&#25509;&#12289;&#19968;&#20010;&#20107;&#21153;&#20351;&#29992;&#22810;&#20010;<tt class="literal">Session</tt>&#26102;&#65292;&#20320;&#23588;&#20854;&#38656;&#35201;&#26684;&#22806;&#22320;&#23567;&#24515;&#12290;<tt class="literal">Session</tt>&#23545;&#35937;&#20250;&#35760;&#24405;&#19979;&#35843;&#20837;&#25968;&#25454;&#26356;&#26032;&#30340;&#24773;&#20917;&#65292;&#25152;&#20197;&#21478;&#19968;&#20010;<tt class="literal">Session</tt>&#23545;&#35937;&#21487;&#33021;&#20250;&#36935;&#21040;&#36807;&#26102;&#30340;&#25968;&#25454;&#12290;		</p></li><li><p>		    <tt class="literal">Session</tt><span class="emphasis"><em>&#19981;&#26159;</em></span>&#32447;&#31243;&#23433;&#20840;&#30340;&#12290;&#22914;&#26524;&#30830;&#23454;&#38656;&#35201;&#22312;&#20004;&#20010;&#21516;&#26102;&#36816;&#34892;&#30340;&#32447;&#31243;&#20013;&#20849;&#20139;&#20250;&#35805;&#65292;&#37027;&#20040;&#20320;&#24212;&#35813;&#30830;&#20445;&#32447;&#31243;&#22312;&#35775;&#38382;&#20250;&#35805;&#26102;&#65292;&#32447;&#31243;&#23545;<tt class="literal">Session</tt>&#20855;&#26377;&#21516;&#27493;&#38145;&#12290;		</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="transactions-s3"></a>17.3.&nbsp;&#20048;&#35266;&#38145;&#23450;&#65295;&#29256;&#26412;&#21270;&#65288;Optimistic Locking / Versioning&#65289;</h2></div></div><div></div></div><p>	    &#35768;&#22810;&#21830;&#19994;&#36807;&#31243;&#38656;&#35201;&#19968;&#31995;&#21015;&#19982;&#29992;&#25143;&#36827;&#34892;&#20132;&#20114;&#30340;&#36807;&#31243;&#65292;&#25968;&#25454;&#24211;&#35775;&#38382;&#31359;&#25554;&#22312;&#36825;&#20123;&#36807;&#31243;&#20013;&#12290;&#23545;&#20110;web&#21644;&#20225;&#19994;&#24212;&#29992;&#26469;&#35828;&#65292;&#36328;&#19968;&#20010;&#29992;&#25143;&#20132;&#20114;&#36807;&#31243;&#30340;&#25968;&#25454;&#20107;&#21153;&#26159;&#19981;&#21487;&#25509;&#21463;&#30340;&#65292;&#22240;&#32780;&#32500;&#25252;&#21508;&#21830;&#19994;&#20107;&#21153;&#38388;&#30340;&#38548;&#31163;&#65288;isolocation&#65289;&#23601;&#25104;&#20026;&#24212;&#29992;&#23618;&#30340;&#37096;&#20998;&#36131;&#20219;&#12290;&#21807;&#19968;&#28385;&#36275;&#39640;&#24182;&#21457;&#24615;&#20197;&#21450;&#39640;&#21487;&#25193;&#23637;&#24615;&#30340;&#26041;&#27861;&#26159;&#20351;&#29992;&#24102;&#26377;&#29256;&#26412;&#21270;&#30340;&#20048;&#35266;&#38145;&#23450;&#12290;Hibernate&#20026;&#20351;&#29992;&#20048;&#35266;&#38145;&#23450;&#30340;&#20195;&#30721;&#25552;&#20379;&#20102;&#19977;&#31181;&#21487;&#33021;&#30340;&#26041;&#27861;&#12290;	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="transactions-s3-1"></a>17.3.1.&nbsp;&#20351;&#29992;&#38271;&#29983;&#21629;&#21608;&#26399;&#24102;&#26377;&#33258;&#21160;&#29256;&#26412;&#21270;&#30340;&#20250;&#35805;</h3></div></div><div></div></div><p>	        &#22312;&#25972;&#20010;&#21830;&#19994;&#36807;&#31243;&#20013;&#20351;&#29992;&#19968;&#20010;&#21333;&#29420;&#30340;<tt class="literal">Session</tt>&#23454;&#20363;&#20197;&#21450;&#23427;&#30340;&#25345;&#20037;&#21270;&#23454;&#20363;&#65292;&#36825;&#20010;<tt class="literal">Session</tt>&#20351;&#29992;&#24102;&#26377;&#29256;&#26412;&#21270;&#30340;&#20048;&#35266;&#38145;&#23450;&#26426;&#21046;&#65292;&#26469;&#30830;&#20445;&#22810;&#20010;&#25968;&#25454;&#24211;&#20107;&#21153;&#23545;&#20110;&#24212;&#29992;&#26469;&#35828;&#21482;&#26159;&#19968;&#20010;&#36923;&#36753;&#19978;&#30340;&#20107;&#21153;&#12290;&#22312;&#31561;&#24453;&#29992;&#25143;&#20132;&#20114;&#26102;&#65292;<tt class="literal">Session</tt>&#26029;&#24320;&#19982;&#25968;&#25454;&#24211;&#30340;&#36830;&#25509;&#12290;&#36825;&#20010;&#26041;&#27861;&#20174;&#25968;&#25454;&#24211;&#35775;&#38382;&#26041;&#38754;&#26469;&#30475;&#26159;&#26368;&#26377;&#25928;&#30340;&#65292;&#24212;&#29992;&#19981;&#38656;&#35201;&#20851;&#24515;&#23545;&#33258;&#24049;&#30340;&#29256;&#26412;&#26816;&#26597;&#25110;&#26159;&#37325;&#26032;&#19982;&#19981;&#38656;&#35201;&#24207;&#21015;&#21270;&#65288;transient&#65289;&#30340;&#23454;&#20363;&#36827;&#34892;&#20851;&#32852;&#12290;	    </p><pre class="programlisting">// foo is an instance loaded earlier by the Sessionsession.reconnect();foo.setProperty("bar");session.flush();session.connection().commit();session.disconnect();</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="transactions-s3-2"></a>17.3.2.&nbsp;&#20351;&#29992;&#24102;&#26377;&#33258;&#21160;&#29256;&#26412;&#21270;&#30340;&#22810;&#20010;&#20250;&#35805;</h3></div></div><div></div></div><p>	        &#27599;&#20010;&#19982;&#25345;&#20037;&#21270;&#23384;&#20648;&#30340;&#20132;&#20114;&#20986;&#29616;&#22312;&#19968;&#20010;&#26032;&#30340;<tt class="literal">Session</tt>&#20013;&#65292;&#22312;&#27599;&#27425;&#19982;&#25968;&#25454;&#24211;&#30340;&#20132;&#20114;&#20013;&#65292;&#20351;&#29992;&#30456;&#21516;&#30340;&#25345;&#20037;&#21270;&#23454;&#20363;&#12290;&#24212;&#29992;&#25805;&#20316;&#37027;&#20123;&#20174;&#20854;&#23427;<tt class="literal">Session</tt>&#35843;&#20837;&#30340;&#19981;&#38656;&#35201;&#25345;&#20037;&#21270;&#23454;&#20363;&#30340;&#29366;&#24577;&#65292;&#36890;&#36807;&#20351;&#29992;<tt class="literal">Session.update()</tt>&#25110;&#32773;<tt class="literal">Session.saveOrUpdate()</tt>&#26469;&#37325;&#26032;&#24314;&#31435;&#19982;&#23427;&#20204;&#30340;&#20851;&#32852;&#12290;	    </p><pre class="programlisting">// foo is an instance loaded by a previous Sessionfoo.setProperty("bar");session = factory.openSession();session.saveOrUpdate(foo);session.flush();session.connection().commit();session.close();</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="transactions-s3-3"></a>17.3.3.&nbsp;&#24212;&#29992;&#31243;&#24207;&#33258;&#24049;&#36827;&#34892;&#29256;&#26412;&#26816;&#26597;</h3></div></div><div></div></div><p>	        &#27599;&#24403;&#19968;&#20010;&#26032;&#30340;<tt class="literal">Session</tt>&#20013;&#19982;&#25345;&#20037;&#21270;&#23384;&#20648;&#23618;&#20986;&#29616;&#20132;&#20114;&#30340;&#26102;&#20505;&#65292;&#36825;&#20010;session&#20250;&#22312;&#25805;&#20316;&#25345;&#20037;&#21270;&#23454;&#20363;&#21069;&#37325;&#26032;&#25226;&#23427;&#20204;&#20174;&#25968;&#25454;&#23384;&#20648;&#20013;&#35013;&#36733;&#36827;&#26469;&#12290;&#25105;&#20204;&#29616;&#22312;&#25152;&#35828;&#30340;&#26041;&#24335;&#23601;&#26159;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#33258;&#24049;&#20351;&#29992;&#29256;&#26412;&#26816;&#26597;&#26469;&#30830;&#20445;&#21830;&#19994;&#36807;&#31243;&#30340;&#38548;&#32477;&#24615;&#12290;&#65288;&#24403;&#28982;&#65292;Hibernate&#20173;&#20250;&#20026;&#20320;<span class="emphasis"><em>&#26356;&#26032;</em></span>&#29256;&#26412;&#21495;&#65289;&#12290;&#20174;&#25968;&#25454;&#24211;&#35775;&#38382;&#26041;&#38754;&#26469;&#30475;&#65292;&#36825;&#31181;&#26041;&#27861;&#26159;&#26368;&#27809;&#26377;&#25928;&#29575;&#30340;&#65292;&#19982;entity EJB&#26041;&#24335;&#31867;&#20284;&#12290;	    </p><pre class="programlisting">// foo is an instance loaded by a previous Sessionsession = factory.openSession();int oldVersion = foo.getVersion();session.load( foo, foo.getKey() );if ( oldVersion!=foo.getVersion ) throw new StaleObjectStateException();foo.setProperty("bar");session.flush();session.connection().commit();session.close();</pre><p>	        &#24403;&#28982;&#65292;&#22914;&#26524;&#22312;&#20302;&#25968;&#25454;&#24182;&#34892;&#65288;low-data-concurrency&#65289;&#30340;&#29615;&#22659;&#20013;&#65292;&#24182;&#19981;&#38656;&#35201;&#29256;&#26412;&#26816;&#26597;&#65292;&#20320;&#20173;&#21487;&#20197;&#20351;&#29992;&#36825;&#20010;&#26041;&#27861;&#65292;&#21482;&#38656;&#35201;&#24573;&#30053;&#29256;&#26412;&#26816;&#26597;&#12290;	    </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="transactions-s4"></a>17.4.&nbsp;&#20250;&#35805;&#26029;&#24320;&#36830;&#25509;&#65288;Session disconnection&#65289;</h2></div></div><div></div></div><p>            The first approach described above is to maintain a single <tt class="literal">Session</tt>             for a whole business process thats spans user think time. (For example, a servlet might             keep a <tt class="literal">Session</tt> in the user's <tt class="literal">HttpSession</tt>.) For             performance reasons you should        </p><p>	    &#19978;&#38754;&#25552;&#21040;&#30340;&#31532;&#19968;&#31181;&#26041;&#27861;&#26159;&#23545;&#20110;&#23545;&#19968;&#20010;&#29992;&#25143;&#30340;&#19968;&#27425;&#30331;&#24405;&#20135;&#29983;&#30340;&#25972;&#20010;&#21830;&#19994;&#36807;&#31243;&#32500;&#25252;&#19968;&#20010;<tt class="literal">Session</tt>&#12290;&#65288;&#20030;&#20363;&#26469;&#35828;&#65292;servlet&#26377;&#21487;&#33021;&#20250;&#22312;&#29992;&#25143;&#30340;<tt class="literal">HttpSession</tt>&#20013;&#20445;&#30041;&#19968;&#20010;<tt class="literal">Session</tt>&#65289;&#12290;&#20026;&#24615;&#33021;&#32771;&#34385;&#65292;&#20320;&#24517;&#39035;	</p><div class="orderedlist"><ol type="1" compact><li><p>		    &#25552;&#20132;<tt class="literal">Transaction</tt>&#65288;&#25110;&#32773;JDBC&#36830;&#25509;&#65289;&#65292;&#28982;&#21518;				</p></li><li><p>		    (&#22312;&#31561;&#24453;&#29992;&#25143;&#25805;&#20316;&#21069;&#65292;)&#26029;&#24320;<tt class="literal">Session</tt>&#19982;JDBC&#36830;&#25509;&#12290;		</p></li></ol></div><p>	    <tt class="literal">Session.disconnect()</tt>&#26041;&#27861;&#20250;&#26029;&#24320;&#20250;&#35805;&#19982;JDBC&#30340;&#36830;&#25509;&#65292;&#25226;&#36830;&#25509;&#36820;&#36824;&#32473;&#36830;&#25509;&#27744;&#65288;&#38500;&#38750;&#26159;&#20320;&#33258;&#24049;&#25552;&#20379;&#36825;&#20010;&#36830;&#25509;&#30340;&#65289;&#12290;	</p><p>	    <tt class="literal">Session.reconnect()</tt>&#26041;&#27861;&#20250;&#24471;&#21040;&#19968;&#20010;&#26032;&#30340;&#36830;&#25509;&#65288;&#20320;&#20063;&#21487;&#20197;&#33258;&#24049;&#25552;&#20379;&#19968;&#20010;&#65289;&#65292;&#37325;&#26032;&#24320;&#22987;&#20250;&#35805;&#12290;&#22312;&#37325;&#26032;&#36830;&#25509;&#21518;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#23545;&#20219;&#20309;&#21487;&#33021;&#34987;&#20854;&#23427;&#20107;&#21153;&#26356;&#26032;&#30340;&#23545;&#35937;&#35843;&#29992;<tt class="literal">Session.lock()</tt>&#26041;&#27861;&#65292;&#26469;&#24378;&#36843;&#23545;&#20320;&#27809;&#26377;&#26356;&#26032;&#30340;&#25968;&#25454;&#36827;&#34892;&#29256;&#26412;&#26816;&#26597;&#12290;&#20320;&#19981;&#38656;&#35201;&#23545;<span class="emphasis"><em>&#27491;&#22312;</em></span>&#26356;&#26032;&#30340;&#25968;&#25454;&#35843;&#29992;lock()&#12290;	</p><p>	    &#36825;&#26159;&#19968;&#20010;&#20363;&#23376;&#65306;	</p><pre class="programlisting">SessionFactory sessions;List fooList;Bar bar;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -