﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-面朝大海,春暖花开-随笔分类-J2EE</title><link>http://www.blogjava.net/sodmewuhan/category/9571.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 20:41:20 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 20:41:20 GMT</pubDate><ttl>60</ttl><item><title>Hibernate的数据库事务管理</title><link>http://www.blogjava.net/sodmewuhan/archive/2006/04/22/42505.html</link><dc:creator>面朝大海</dc:creator><author>面朝大海</author><pubDate>Sat, 22 Apr 2006 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/sodmewuhan/archive/2006/04/22/42505.html</guid><wfw:comment>http://www.blogjava.net/sodmewuhan/comments/42505.html</wfw:comment><comments>http://www.blogjava.net/sodmewuhan/archive/2006/04/22/42505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodmewuhan/comments/commentRss/42505.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodmewuhan/services/trackbacks/42505.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1; tab-stops: list 24.0pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体">
								<span style="mso-list: Ignore">一、<span style="FONT: 7pt 'Times New Roman'">           </span></span>
						</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">数据库事务概念</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 12pt">
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">数据库事务的特征：</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">ACID<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">Atomic</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">（原子性）、</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">Consistency</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">（一致性）、</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">Isolation</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">（隔离性）和</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">Durability</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">（持久性）。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">DBMS</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">用日志来保证数据的原子性、一致性和持久性；用锁的机制来保证数据的隔离性。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1; tab-stops: list 24.0pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体">
								<span style="mso-list: Ignore">二、<span style="FONT: 7pt 'Times New Roman'">           </span></span>
						</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">事务的边界</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 12pt">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">数据库支持</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">2</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">种事务模式：自动提交和手动提交。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">JDBC API</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的事务边界</span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">try</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_4_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4_248_Open_Text.style.display='none'; Codehighlighter1_4_248_Closed_Image.style.display='inline'; Codehighlighter1_4_248_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_4_248_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4_248_Closed_Text.style.display='none'; Codehighlighter1_4_248_Open_Image.style.display='inline'; Codehighlighter1_4_248_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span id="Codehighlighter1_4_248_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_4_248_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Connection conn </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> java.sql.DriverManager,.getConnection(dbUrl,dbUser,dbPwd);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    conn.setAutoCommit(</span>
						<span style="COLOR: #0000ff">false</span>
						<span style="COLOR: #000000">); </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">设置成手动模式</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    stmt </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> conn.createStatement();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    stmt.executeUpdate(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/dot.gif" />.</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">); </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">数据库更新1</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    stmt.executeUpdate(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/dot.gif" />.</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">); </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">数据库更新2</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    conn.commit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">catch</span>
				<span style="COLOR: #000000">(Exception e)<br /><img id="Codehighlighter1_269_289_Open_Image" onclick="this.style.display='none'; Codehighlighter1_269_289_Open_Text.style.display='none'; Codehighlighter1_269_289_Closed_Image.style.display='inline'; Codehighlighter1_269_289_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_269_289_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_269_289_Closed_Text.style.display='none'; Codehighlighter1_269_289_Open_Image.style.display='inline'; Codehighlighter1_269_289_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_269_289_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_269_289_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    conn.rollback();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">finally</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_299_331_Open_Image" onclick="this.style.display='none'; Codehighlighter1_299_331_Open_Text.style.display='none'; Codehighlighter1_299_331_Closed_Image.style.display='inline'; Codehighlighter1_299_331_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_299_331_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_299_331_Closed_Text.style.display='none'; Codehighlighter1_299_331_Open_Image.style.display='inline'; Codehighlighter1_299_331_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span id="Codehighlighter1_299_331_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_299_331_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    stmt.close();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    conn.close();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<span lang="EN-US" style="FONT-SIZE: 12pt">
				<o:p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">Hibernate API</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">声明事务边界</span>
						</p>
						<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								<span style="COLOR: #000000">Session session </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> factory.openSession();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Transaction tx;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_62_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_136_Open_Text.style.display='none'; Codehighlighter1_62_136_Closed_Image.style.display='inline'; Codehighlighter1_62_136_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_62_136_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_62_136_Closed_Text.style.display='none'; Codehighlighter1_62_136_Open_Image.style.display='inline'; Codehighlighter1_62_136_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
								<span id="Codehighlighter1_62_136_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_62_136_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    tx </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> session.beginTransaction(); </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">开始事务<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">执行操作</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">    。。。。。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    tx.commit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								</span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (Exception e)<br /><img id="Codehighlighter1_158_198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_158_198_Open_Text.style.display='none'; Codehighlighter1_158_198_Closed_Image.style.display='inline'; Codehighlighter1_158_198_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_158_198_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_158_198_Closed_Text.style.display='none'; Codehighlighter1_158_198_Open_Image.style.display='inline'; Codehighlighter1_158_198_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
								<span id="Codehighlighter1_158_198_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_158_198_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
										<span style="COLOR: #0000ff">if</span>
										<span style="COLOR: #000000"> (tx</span>
										<span style="COLOR: #000000">!=</span>
										<span style="COLOR: #0000ff">null</span>
										<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_176_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_196_Open_Text.style.display='none'; Codehighlighter1_176_196_Closed_Image.style.display='inline'; Codehighlighter1_176_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_176_196_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_196_Closed_Text.style.display='none'; Codehighlighter1_176_196_Open_Image.style.display='inline'; Codehighlighter1_176_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
										<span id="Codehighlighter1_176_196_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_176_196_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        tx.rollback();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								</span>
								<span style="COLOR: #0000ff">finally</span>
								<span style="COLOR: #000000">
										<br />
										<img id="Codehighlighter1_208_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_208_228_Open_Text.style.display='none'; Codehighlighter1_208_228_Closed_Image.style.display='inline'; Codehighlighter1_208_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
										<img id="Codehighlighter1_208_228_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_208_228_Closed_Text.style.display='none'; Codehighlighter1_208_228_Open_Image.style.display='inline'; Codehighlighter1_208_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
								</span>
								<span id="Codehighlighter1_208_228_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_208_228_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    session.close();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
								</span>
						</div>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">注：一个</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">session</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">可以对应多个事务，但是推荐的做法是一个</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">session</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">对应一个事务。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1; tab-stops: list 24.0pt">
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体">
												<span style="mso-list: Ignore">
														<font face="Times New Roman">
																<span style="FONT: 7pt 'Times New Roman'">
																		<strong>
																				<font size="3">三、</font>
																		</strong>           </span>
														</font>
												</span>
										</span>
								</b>
								<b style="mso-bidi-font-weight: normal">
										<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">多事务的并发问题</span>
								</b>
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US" style="FONT-SIZE: 12pt">
												<o:p>
												</o:p>
										</span>
								</b>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">当多个事务同时访问相同的数据的时候，程序如果没有采取适当的隔离措施，就会发生数据库的并发问题。常见的并发问题有：</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">第一类丢失更新：撤消事务的时候，把其他的事务已经提交的数据给覆盖了；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">脏读；读了没有提交的数据；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">虚读：一个事务读到另外一个事务已经提交的新插入的数据；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">不可重复读：一个事务读到另外一个事务已经提交的更新的数据；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">第二类丢失更新：一个事务覆盖另外一个事务已经提交的更新数据。</span> <br /><strong>四、</strong><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">           </span></font></span></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">锁</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt"><o:p></o:p></span></b></p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">一般地，大型的</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">DBMS</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">都会自动的管理锁定机制，但是在对数据的安全性、完整性和一致性有特殊要求的地方，可以由事务本身来管理琐的机制。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">有一点要关注的是：锁的粒度越大，隔离性越好，并发性越差。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">按照锁的程度来分有：</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">共享锁：用读操作，非独占的，其他事务可以读，但是不能更新，并发性好；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">独占锁：用与</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">insert update </font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">和</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">delete</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">等语句，其他事务不能读，也不能改，并发性差；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">更新锁：执行</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">update</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的时候，加锁。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">死琐：多是事务分别锁定了一个资源，又请求锁定对方已经锁定的资源，就造成了请求环。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">降低死锁的最好办法是使用短事务。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1; tab-stops: list 24.0pt">
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体">
												<span style="mso-list: Ignore">
														<font face="Times New Roman">
																<span style="FONT: 7pt 'Times New Roman'">
																		<strong>
																				<font size="3">五、</font>
																		</strong>           </span>
														</font>
												</span>
										</span>
								</b>
								<b style="mso-bidi-font-weight: normal">
										<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">数据库的事务隔离级别</span>
								</b>
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US" style="FONT-SIZE: 12pt">
												<o:p>
												</o:p>
										</span>
								</b>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">数据库提供</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">4</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">种事务隔离级别：</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Serializable</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">：串行化；（隔离级别最高）</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">1<o:p></o:p></font>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Repeatable Read</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">：可重复读；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">2<o:p></o:p></font>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Read Commited</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">：读已提交数据；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">4<o:p></o:p></font>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Read Uncommited</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">：读未提交数据；（隔离级别最低）</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">8<o:p></o:p></font>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Hiberate</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">中的隔离级别的设置</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">在</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Hibernate</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的配置文件中</span>
								<span style="FONT-SIZE: 12pt">
										<font face="Times New Roman">
												<span lang="EN-US">hibernate.connection.isolation=2<o:p></o:p></span>
										</font>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1; tab-stops: list 24.0pt">
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体">
												<span style="mso-list: Ignore">
														<font face="Times New Roman">
																<span style="FONT: 7pt 'Times New Roman'">
																		<strong>
																				<font size="3">六、</font>
																		</strong>           </span>
														</font>
												</span>
										</span>
								</b>
								<b style="mso-bidi-font-weight: normal">
										<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">悲观锁和乐观琐</span>
								</b>
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US" style="FONT-SIZE: 12pt">
												<o:p>
												</o:p>
										</span>
								</b>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">从应用程序的角度来看，锁分为悲观锁和乐观锁。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">悲观锁：显示的为程序加锁，但是降低并发性。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Select ……. For update;<o:p></o:p></font>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">在</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Hibernate</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">中的代码</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">Session.get(Account.class,net Long(1),LockMode.UPGRADE)</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">//</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">程序采用悲观锁</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">乐观锁：依靠</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">DBMS</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">来管理锁，程序依靠版本控制来避免并发问题。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">在对象</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">-</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">关系映射的文件中，用</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">&lt;version&gt;</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">或者</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman">&lt;timestamp&gt;</font>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">可以管理并发。乐观琐比悲观琐有更好的并发性，优先考虑乐观琐。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<font face="Times New Roman"> <o:p></o:p></font>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						</p>
				</o:p>
		</span>
		<span lang="EN-US" style="FONT-SIZE: 12pt">
				<o:p>
				</o:p>
		</span>
<img src ="http://www.blogjava.net/sodmewuhan/aggbug/42505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodmewuhan/" target="_blank">面朝大海</a> 2006-04-22 17:12 <a href="http://www.blogjava.net/sodmewuhan/archive/2006/04/22/42505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的检索策略</title><link>http://www.blogjava.net/sodmewuhan/archive/2006/04/10/40320.html</link><dc:creator>面朝大海</dc:creator><author>面朝大海</author><pubDate>Mon, 10 Apr 2006 12:44:00 GMT</pubDate><guid>http://www.blogjava.net/sodmewuhan/archive/2006/04/10/40320.html</guid><wfw:comment>http://www.blogjava.net/sodmewuhan/comments/40320.html</wfw:comment><comments>http://www.blogjava.net/sodmewuhan/archive/2006/04/10/40320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodmewuhan/comments/commentRss/40320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodmewuhan/services/trackbacks/40320.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">Hibernate</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供了</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">3</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">种检索策略：</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">        </span></span>
				</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">延迟检索；</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">        </span></span>
				</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">立即检索；</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">        </span></span>
				</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">迫切左外连接；</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">Hibernate</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">2</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">种方式来确定检索策略，一中是在配置文件当中，另外一种是在程序种设置。当然，如果你在程序中设置了检索策略，那么你在配置文件中的设置也就无效了。另外的一种情况是</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">HQL</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会忽略配置文件的设置，而总是采用迫切左外连接。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo2; tab-stops: list 24.0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体">
						<span style="mso-list: Ignore">一、</span>
				</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类级别的检索</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以选择的检索策略是立即检索和延迟检索，默认的是立即检索。用配置文件中的</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">&lt;class&gt;</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点的</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">lazy</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来控制。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：不管你在配置</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">class</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">lazy</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">true</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还是</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">false</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，对</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">get()</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">create</span>
				<tt>
						<span lang="EN-US" style="FONT-SIZE: 9pt">Criteria</span>
				</tt>
				<span lang="EN-US" style="FONT-SIZE: 12pt">()</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法都不起作用，只有对</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">load()</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法起作用。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当你使用的检索策略是</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">lazy</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，当你执行</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">Customer customer = (Customer)session.load(Customer.class,new Long(1));<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，</span>
				<span style="FONT-SIZE: 12pt">
						<span lang="EN-US">Hibernate</span>
				</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不从数据库检索数据，而只是产生一个代理类，只有当你执行</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">Customer.getName();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">Hibernate</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">才到数据库取数据。所以，如下的代码是会被抛出异常的：</span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">Session session </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> sessionFactory.openSession();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />transaction tx </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tx </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> session.beginTransaction();<br />  Customer customer </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> (Customer)session.load(Customer.</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Long(</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tx.commit();<br />  session.close();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />customer.getName();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<span lang="EN-US" style="FONT-SIZE: 12pt">
				<o:p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">get()</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法总是用的立即检索，如果和它相关联的类也是用的立即检索，那么也会把相关联的数据也检索出来。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1; tab-stops: list 24.0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体">
										<span style="mso-list: Ignore">二、</span>
								</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一对和多对多关联检索</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一般地，为了有减少对数据库的访问，我们往往用延迟检索的策略。所以，我们优先使用如下方式；</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">&lt;set class=”order” inverse=”true’ lazy=”true” &gt;<o:p></o:p></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但是，我们在检索“多”的一方的时候，</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">Hibernate</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不能为我们产生代理类。由此，我们就要用</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">betch-size</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置来减少</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">SQL</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当我们使用</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">outer-join</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性的时候，我们就没有必要使用</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">lazy</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性了。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">Outer-join</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会一次将“一”方和与之相关的“多”方用左外连接的方式检索出来。</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 66pt; mso-char-indent-count: 5.5">
								<span lang="EN-US" style="FONT-SIZE: 12pt">Session session = sessionFactory.openSession();<o:p></o:p></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<span style="mso-tab-count: 2">              </span>
										<span style="mso-spacerun: yes">       </span>Transaction tx = null;<o:p></o:p></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<span style="mso-tab-count: 2">              </span>
										<span style="mso-spacerun: yes">       </span>tx = session.beginTransaction();<o:p></o:p></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<span style="mso-tab-count: 2">              </span>
										<span style="mso-spacerun: yes">      </span>Customer customer = (Customer)session.get(Customer.class,new Long(1));<o:p></o:p></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产生的</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">SQL</span>
								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句如下：</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">Hibernate: select customer0_.ID as ID1_, customer0_.NAME as NAME2_1_, orders1_.CUSTOMER_ID as CUSTOMER3_3_, orders1_.ID as ID3_, orders1_.ID as ID0_, orders1_.ORDER_NUMBER as ORDER2_1_0_, orders1_.CUSTOMER_ID as CUSTOMER3_1_0_ from sampledb.customers customer0_ left outer join sampledb.orders orders1_ on customer0_.ID=orders1_.CUSTOMER_ID where customer0_.ID=?</span>
								<span lang="EN-US" style="FONT-SIZE: 12pt">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						</p>
				</o:p>
		</span>
<img src ="http://www.blogjava.net/sodmewuhan/aggbug/40320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodmewuhan/" target="_blank">面朝大海</a> 2006-04-10 20:44 <a href="http://www.blogjava.net/sodmewuhan/archive/2006/04/10/40320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>精通Hiberante笔记一</title><link>http://www.blogjava.net/sodmewuhan/archive/2006/04/06/39676.html</link><dc:creator>面朝大海</dc:creator><author>面朝大海</author><pubDate>Thu, 06 Apr 2006 13:07:00 GMT</pubDate><guid>http://www.blogjava.net/sodmewuhan/archive/2006/04/06/39676.html</guid><wfw:comment>http://www.blogjava.net/sodmewuhan/comments/39676.html</wfw:comment><comments>http://www.blogjava.net/sodmewuhan/archive/2006/04/06/39676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodmewuhan/comments/commentRss/39676.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodmewuhan/services/trackbacks/39676.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最近在读孙卫琴的《精通</span>
				<span lang="EN-US">Hibernate : JAVA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象持久化技术详解》，深感</span>
				<span lang="EN-US">Hibernate</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术的灵活。当然，一个技术的灵活所带来的副面效应就是掌握它的难度随着灵活度的增加而增加。这本书是以</span>
				<span lang="EN-US">Hibernate2.0</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">蓝本讲解的，现在</span>
				<span lang="EN-US">Hibernate</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经发展到了</span>
				<span lang="EN-US">3.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了。虽然现在显得有点过时了，但是</span>
				<span lang="EN-US">ORM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的思想还是一样的。以后的文章和代码都以</span>
				<span lang="EN-US">Hibernate3.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为蓝本。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先我们要解决一个问题就是，为什么我们要使用</span>
				<span lang="EN-US">Hibernate</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术。在</span>
				<span lang="EN-US">JAVA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">世界中，已经有了由</span>
				<span lang="EN-US">SUN</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提出的业界的标准</span>
				<span lang="EN-US">J2EE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">规范，在规范中没有提到有</span>
				<span lang="EN-US">ORM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的影子，如果你说有的话，那也只是</span>
				<span lang="EN-US">CMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（容器</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）和</span>
				<span lang="EN-US">ORM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有些神似。但是毕竟</span>
				<span lang="EN-US">EJB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是个重量的东东，在你享受</span>
				<span lang="EN-US">EJB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">带给你的种种优厚的待遇同时，你就不得不背负沉重的枷锁，这也就是为什么种种轻量级的框架在</span>
				<span lang="EN-US">JAVA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">社区大行其道的原因之一。那么有没有一种方案使我们可以在不使用</span>
				<span lang="EN-US">EJB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，还可以从容而且优雅的实现从对象到数据库的</span>
				<span lang="EN-US">mapping </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">呢？当然，那就是</span>
				<span lang="EN-US">Hibernate</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在介绍</span>
				<span lang="EN-US">Hibernate</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之前，首先让我们来看看软件的几种模型。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一、软件模型</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概念模型：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概念模型清楚的描述出了问题域的实体。我们可以用一对一、一对多和多对多的关系来描述实体之间的关系。这种关系是技术人员和非技术人员都可以理解的，所以，我们要让客户或者领域专家帮助系统分析人员对概念模型中出现的问题做出修改。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关系数据模型：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当前的计算机只能用具有某种结构的形式来描述现实世界中的事物。从《数据结构》中我们知道，计算机世界中常用的数据结构有线形结构，树和图三大类结构。而表属于线形结构中的一种。计算机可以很方便的处理表这种结构的数据，所以，当前采用最广泛的还是关系型数据库（以后简称数据库）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库通过用表，表的索引，视图和表与表之间的参照完整性来描述概念模型。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">域模型和域对象：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们需要在概念模型的基础上创建域模型，也叫做设计模型。域模型的主要内容有：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">域对象：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">域对象</span>
				<span lang="EN-US">(Domain Object)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：是构成域模型的基本元素，代表业务中的人、事物等。分以下三种：实体域，</span>
				<span lang="EN-US">J2EE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的代表是实体</span>
				<span lang="EN-US">bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；过程域，</span>
				<span lang="EN-US">J2EE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的代表是</span>
				<span lang="EN-US">Session bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者是消息驱动</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；事件域，代表应用中的事件。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">域对象之间的关系：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、关联</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 一对多的单向关联<br />   </span>
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一对多的双向关联</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、依赖</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果存在</span>
				<span lang="EN-US">class A</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中</span>
				<span lang="EN-US">new class B</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就叫</span>
				<span lang="EN-US">A</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">依赖</span>
				<span lang="EN-US">B</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在实际的开发中，往往是过程域倚赖实体域。在</span>
				<span lang="EN-US">J2EE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的世界中，就是往往是由</span>
				<span lang="EN-US">Session Bean </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来调用实体</span>
				<span lang="EN-US"> Bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。<br />   </span>
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、聚集:</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">描述整体和局部的关系。</span>
				<span lang="EN-US">
						<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
						<v:shape id="_x0000_i1028" style="WIDTH: 230.25pt; HEIGHT: 62.25pt" type="#_x0000_t75">
								<v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png">
								</v:imagedata>
						</v:shape>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、一般化</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">往往指类的继承关系</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">二、</span>
				<span lang="EN-US">ORM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">介绍</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">ORM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的目的就是要把对象和关系的</span>
				<span lang="EN-US">mapping</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。从上面的分析可以看出，二者的出发点是不同的，关系模型是面向关系的，域模型是面向对象的。它们的</span>
				<span lang="EN-US">mapping </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如下：</span>
		</p>
		<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">面向对象</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">面向关系</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 1">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 2">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表中的记录</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="284">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表中的字段</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">三、</span>
				<span lang="EN-US">JAVA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">世界中的其他持久化模式</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、主动域对象模式</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">JDO</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">CMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式（和</span>
				<span lang="EN-US">ORM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和类似，不过</span>
				<span lang="EN-US">CMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是用在</span>
				<span lang="EN-US">EJB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器当中，用来持久化</span>
				<span lang="EN-US">EJB</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组件）。</span>
		</p>
<img src ="http://www.blogjava.net/sodmewuhan/aggbug/39676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodmewuhan/" target="_blank">面朝大海</a> 2006-04-06 21:07 <a href="http://www.blogjava.net/sodmewuhan/archive/2006/04/06/39676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>