??xml version="1.0" encoding="utf-8" standalone="yes"?>中日韩美女免费视频网站在线观看,日本一区二区高清视频,中文字幕一区二区三区久久网站http://www.aygfsteel.com/sodmewuhan/category/9571.htmlzh-cnTue, 27 Feb 2007 20:41:20 GMTTue, 27 Feb 2007 20:41:20 GMT60Hibernate的数据库事务理http://www.aygfsteel.com/sodmewuhan/archive/2006/04/22/42505.html面朝大v面朝大vSat, 22 Apr 2006 09:12:00 GMThttp://www.aygfsteel.com/sodmewuhan/archive/2006/04/22/42505.htmlhttp://www.aygfsteel.com/sodmewuhan/comments/42505.htmlhttp://www.aygfsteel.com/sodmewuhan/archive/2006/04/22/42505.html#Feedback0http://www.aygfsteel.com/sodmewuhan/comments/commentRss/42505.htmlhttp://www.aygfsteel.com/sodmewuhan/services/trackbacks/42505.html 一?span style="FONT: 7pt 'Times New Roman'">           数据库事务概?/span>

数据库事务的特征Q?/span> ACID

Atomic Q原子性)?/span> Consistency Q一致性)?/span> Isolation Q隔L)?/span> Durability Q持久性)?/span> DBMS 用日志来保证数据的原子性、一致性和持久性;用锁的机制来保证数据的隔L?/span>

二?span style="FONT: 7pt 'Times New Roman'">           事务的边?/span>

数据库支?/span> 2 U事务模式:自动提交和手动提交?/span>

JDBC API 的事务边?/span>

try
{
    Connection conn 
=  java.sql.DriverManager,.getConnection(dbUrl,dbUser,dbPwd);
    conn.setAutoCommit(
false );  // 讄成手动模?/span>
    stmt  =  conn.createStatement();
    stmt.executeUpdate(
" . " );  // 数据库更?
    stmt.executeUpdate( " . " );  // 数据库更?
    
    conn.commit();
}

catch (Exception e)
{
    conn.rollback();
}

finally
{
    stmt.close();
    conn.close();
}

Hibernate API 声明事务边界

Session session  =  factory.openSession();
Transaction tx;
try  
{
    tx 
=  session.beginTransaction();  // 开始事?br />     // 执行操作
    。。。。?br />    
    tx.commit();
}

catch  (Exception e)
{
    
if  (tx != null )
    
{
        tx.rollback();
    }

}

finally
{
    session.close();
}

注:一?/span> session 可以对应多个事务Q但是推荐的做法是一?/span> session 对应一个事务?/span>

三?/font>            多事务的q发问题

当多个事务同时访问相同的数据的时候,E序如果没有采取适当的隔L施,׃发生数据库的q发问题。常见的q发问题有:

W一cM失更斎ͼ撤消事务的时候,把其他的事务已经提交的数据给覆盖了;

脏读Q读了没有提交的数据Q?/span>

虚读Q一个事务读到另外一个事务已l提交的新插入的数据Q?/span>

不可重复读:一个事务读到另外一个事务已l提交的更新的数据;

W二cM失更斎ͼ一个事务覆盖另外一个事务已l提交的更新数据?/span> 
四?/strong>           ?/span>

一般地Q大型的 DBMS 都会自动的管理锁定机Ӟ但是在对数据的安全性、完整性和一致性有Ҏ要求的地方,可以׃务本w来理琐的机制?/span>

有一点要x的是Q锁的粒度越大,隔离性越好,q发性越差?/span>

按照锁的E度来分有:

׃n锁:用读操作Q非独占的,其他事务可以读,但是不能更新Qƈ发性好Q?/span>

独占锁:用与 insert update ?/span> delete {语句,其他事务不能读,也不能改Qƈ发性差Q?/span>

更新锁:执行 update 的时候,加锁?/span>

ȝQ多是事务分别锁定了一个资源,又请求锁定对方已l锁定的资源Q就造成了请求环?/span>

降低死锁的最好办法是使用短事务?/span>

五?/font>            数据库的事务隔离U别

数据库提?/span> 4 U事务隔ȝ别:

Serializable Q串行化Q(隔离U别最高) 1

Repeatable Read Q可重复读; 2

Read Commited Q读已提交数据; 4

Read Uncommited Q读未提交数据;Q隔ȝ别最低) 8

Hiberate 中的隔离U别的设|?/span>

?/span> Hibernate 的配|文件中 hibernate.connection.isolation=2

六?/font>            悲观锁和乐观?/span>

从应用程序的角度来看Q锁分ؓ悲观锁和乐观锁?/span>

悲观锁:昄的ؓE序加锁Q但是降低ƈ发性?/span>

Select …? For update;

?/span> Hibernate 中的代码

Session.get(Account.class,net Long(1),LockMode.UPGRADE) Q?/span> // E序采用悲观?/span>

乐观锁:依靠 DBMS 来管理锁Q程序依靠版本控制来避免q发问题?/span>

在对?/span> - 关系映射的文件中Q用 <version> 或?/span> <timestamp> 可以理q发。乐观琐比悲观琐有更好的q发性,优先考虑乐观琐?/span>  



面朝大v 2006-04-22 17:12 发表评论
]]>
Hibernate的检索策?/title><link>http://www.aygfsteel.com/sodmewuhan/archive/2006/04/10/40320.html</link><dc:creator>面朝大v</dc:creator><author>面朝大v</author><pubDate>Mon, 10 Apr 2006 12:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/sodmewuhan/archive/2006/04/10/40320.html</guid><wfw:comment>http://www.aygfsteel.com/sodmewuhan/comments/40320.html</wfw:comment><comments>http://www.aygfsteel.com/sodmewuhan/archive/2006/04/10/40320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/sodmewuhan/comments/commentRss/40320.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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'">U检索策略:</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'">q切左外q接Q?/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'">U方式来定索策略,一中是在配|文件当中,另外一U是在程序种讄。当Ӟ如果你在E序中设|了索策略,那么你在配置文g中的讄也就无效了。另外的一U情冉|</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'">会忽略配|文件的讄Q而L采用q切左外q接?/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'">cȝ别的?/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'">可以选择的检索策略是立即索和延迟索,默认的是立即索。用配置文g中的</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"> <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'">注意Q不你在配|?/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'">q是</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'">Q对</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'">不从数据库检索数据,而只是生一个代理类Q只有当你执?/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.aygfsteel.com/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.aygfsteel.com/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.aygfsteel.com/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.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />tx.commit();<br />  session.close();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />customer.getName();<br /><img src="http://www.aygfsteel.com/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'">ҎL用的立即索,如果和它相关联的cM是用的立x索,那么也会把相兌的数据也索出来?/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'">一般地Qؓ了有减少Ҏ据库的访问,我们往往用gq检索的{略。所以,我们优先使用如下方式Q?/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"><set class=”order?inverse=”true?lazy=”true?><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'">但是Q我们在索“多”的一方的时候,</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'">不能为我们生代理类。由此,我们p?/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'">语句如下Q?/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.aygfsteel.com/sodmewuhan/aggbug/40320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/sodmewuhan/" target="_blank">面朝大v</a> 2006-04-10 20:44 <a href="http://www.aygfsteel.com/sodmewuhan/archive/2006/04/10/40320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_NHiberanteW记一http://www.aygfsteel.com/sodmewuhan/archive/2006/04/06/39676.html面朝大v面朝大vThu, 06 Apr 2006 13:07:00 GMThttp://www.aygfsteel.com/sodmewuhan/archive/2006/04/06/39676.htmlhttp://www.aygfsteel.com/sodmewuhan/comments/39676.htmlhttp://www.aygfsteel.com/sodmewuhan/archive/2006/04/06/39676.html#Feedback0http://www.aygfsteel.com/sodmewuhan/comments/commentRss/39676.htmlhttp://www.aygfsteel.com/sodmewuhan/services/trackbacks/39676.html 最q在d卫琴的《精?/span> Hibernate : JAVA 对象持久化技术详解》,深感 Hibernate 技术的灉|。当Ӟ一个技术的灉|所带来的副面效应就是掌握它的难度随着灉|度的增加而增加。这本书是以 Hibernate2.0 蓝本讲解的,现在 Hibernate 已经发展C 3.1 了。虽然现在显得有点过时了Q但?/span> ORM 的思想q是一L。以后的文章和代码都?/span> Hibernate3.1 本?/span>

首先我们要解决一个问题就是,Z么我们要使用 Hibernate 技术。在 JAVA 世界中,已经有了?/span> SUN 提出的业界的标准 J2EE 规范Q在规范中没有提到有 ORM 的媄子,如果你说有的话,那也只是 CMP Q容?/span> Bean Q和 ORM 有些似。但是毕?/span> EJB 是个重量的东东,在你享受 EJB 带给你的U种优厚的待遇同Ӟ你就不得不背负沉重的枷锁Q这也就是ؓ什么种U轻量的框架在 JAVA C֌大行光的原因之一。那么有没有一U方案我们可以在不使用 EJB 的时候,q可以从容而且优雅的实C对象到数据库?/span> mapping 呢?当然Q那是 Hibernate ?/span>

在介l?/span> Hibernate 之前Q首先让我们来看看Y件的几种模型?/span>

一、Y件模?/span>

l         概念模型Q?/span>

概念模型清楚的描q出了问题域的实体。我们可以用一对一、一对多和多对多的关pL描述实体之间的关pR这U关pL技术h员和非技术h员都可以理解的,所以,我们要让客户或者领域专家帮助系l分析h员对概念模型中出现的问题做出修改?/span>

l         关系数据模型Q?/span>

当前的计机只能用具有某U结构的形式来描q现实世界中的事物。从《数据结构》中我们知道Q计机世界中常用的数据l构有线形结构,树和图三大类l构。而表属于UŞl构中的一U。计机可以很方便的处理表这U结构的数据Q所以,当前采用最q泛的还是关pd数据库(以后U数据库Q?/span>

数据库通过用表Q表的烦引,视图和表与表之间的参照完整性来描述概念模型?/span>

l         域模型和域对象:

我们需要在概念模型的基上创建域模型Q也叫做设计模型。域模型的主要内ҎQ?/span>

域对象:

域对?/span> (Domain Object) Q是构成域模型的基本元素Q代表业务中的h、事物等。分以下三种Q实体域Q?/span> J2EE 中的代表是实?/span> bean Q过E域Q?/span> J2EE 中的代表?/span> Session bean 或者是消息驱动 Bean Q事件域Q代表应用中的事件?/span>

域对象之间的关系Q?/span>

1 、关?/span>

 一对多的单向关?br />      一对多的双向关?/span>

2 、依?/span>

如果存在 class A ?/span> new class B Q就?/span> A 依赖 B 。在实际的开发中Q往往是过E域倚赖实体域。在 J2EE 的世界中Q就是往往是由 Session Bean 来调用实?/span> Bean ?br />    3 、聚? 描述整体和局部的关系?/span>

4 、一般化

往往指类的承关p?/span>

二?/span> ORM 介绍

ORM 的目的就是要把对象和关系?/span> mapping 。从上面的分析可以看出,二者的出发Ҏ不同的,关系模型是面向关pȝQ域模型是面向对象的。它们的 mapping 如下Q?/span>

面向对象

面向关系

c?/span>

?/span>

对象

表中的记?/span>

属?/span>

表中的字D?/span>

 

三?/span> JAVA 世界中的其他持久化模?/span>

1 、主动域对象模式

2 ?/span> JDO 模式

3 ?/span> CMP 模式Q和 ORM 和类|不过 CMP 是用?/span> EJB 容器当中Q用来持久化 EJB lgQ?/span>



面朝大v 2006-04-06 21:07 发表评论
]]>
վ֩ģ壺 | | Ѱ| | ű| ƫ| | | | Զ| | ͨɽ| | ̨| | ˫| ˱| | ߷| Զ| | ߱| Ʊ| | | | ɽ| ն| ɽ| | | | ɽ| ԫ| ຣʡ| ɽ| | | | | |