日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于Session接口的update方法主要有如下几点要注意

發(fā)布時(shí)間:2024/4/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Session接口的update方法主要有如下几点要注意 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

1.輸入?yún)?shù)

一般而言,傳遞給update的對(duì)象要是處于游離狀態(tài)的對(duì)象。如果傳一個(gè)持久化對(duì)象,那么update方法就是多余的,因?yàn)镠ibernate的臟檢查機(jī)制會(huì)自動(dòng)根據(jù)對(duì)象屬性值的變化向數(shù)據(jù)庫(kù)發(fā)送一條update語(yǔ)句;如果傳入的對(duì)象處于臨時(shí)狀態(tài),那么此時(shí)Hibernate應(yīng)該會(huì)拋出異常。因?yàn)镠ibernate在更新數(shù)據(jù)時(shí)會(huì)根據(jù)對(duì)象的OID去數(shù)據(jù)庫(kù)查找相應(yīng)的記錄并更新之,而在數(shù)據(jù)庫(kù)中是沒(méi)有記錄與這個(gè)臨時(shí)對(duì)象相關(guān)聯(lián)的,因此Hibernate會(huì)拋出異常,當(dāng)然如果你人為的給臨時(shí)對(duì)象指定一個(gè)OID就該另當(dāng)別論了,如下所示代碼片段:

Customer customer=new Customer();

customer.setId(3L);

customer.setName(“Cindyelf”);

session.update(customer);

這段代碼會(huì)導(dǎo)致如下的sql:update Customer set name=’Cindyelf’ where? id=3;當(dāng)然如果數(shù)據(jù)庫(kù)不存在id為3的那行記錄,Hibernate就會(huì)拋出異常。而給臨時(shí)對(duì)象指定OID是不合規(guī)范的操作,應(yīng)盡量避免。也就是說(shuō)不管傳入是什么狀態(tài)對(duì)象,數(shù)據(jù)庫(kù)中必須要有一條記錄與這個(gè)對(duì)象的OID相對(duì)應(yīng),否則拋出異常。

2.操作

執(zhí)行update方法的時(shí)候,Hibernate會(huì)首先把傳入的對(duì)象放入Session的緩存中,使之持久化,然后計(jì)劃執(zhí)行一個(gè)update語(yǔ)句。Hibernate在生成sql語(yǔ)句的時(shí)候會(huì)根據(jù)對(duì)象的當(dāng)前屬性值來(lái)組裝sql語(yǔ)句,也就是說(shuō),不管程序中修改了多少次屬性值,在執(zhí)行時(shí)只會(huì)執(zhí)行一條update一句。

此外,在update的官方API中特意強(qiáng)調(diào)了一點(diǎn),“如果在session的緩存中有一個(gè)持久化對(duì)象和所要更新的對(duì)象具有相同的OID,那么Hibernate會(huì)拋出異常”。下面的代碼片段演示了這個(gè)錯(cuò)誤:

Customer customer=new Customer();

session1.save(customer);

?

Customer customer1=(Customer)session.load(Customer.class,new Long(6))

session2.update(customer);

?

如上所示,我在session1中持久化了一個(gè)Customer對(duì)象,它的OID是6,然后我在session2中l(wèi)oad一個(gè)OID為6的對(duì)象customer1,然后在session2中update之前的customer,注意,對(duì)于session2而已,customer1是處于游離狀態(tài)的,因?yàn)樗惶幱趕ession2的緩存中。此時(shí)程序會(huì)報(bào)如下錯(cuò)誤:a different object with the same identifier value was already associated with the session。

轉(zhuǎn)載于:https://www.cnblogs.com/anuoruibo/archive/2012/03/20/2407948.html

總結(jié)

以上是生活随笔為你收集整理的关于Session接口的update方法主要有如下几点要注意的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。