久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was ...

 Bladexu的文庫(kù) 2017-12-01

問(wèn)題:org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:……

        主鍵不唯一,,在事務(wù)的最后執(zhí)行SQL時(shí),,session緩存里面有多個(gè)(>1)主鍵一樣的對(duì)象。


原因:了解過(guò)hibernate的都知道它有一個(gè)一級(jí)緩存,,即session級(jí)別的緩存,,在一個(gè)事務(wù)的執(zhí)行過(guò)程中可以管理持久化對(duì)象,在事務(wù)最后執(zhí)行SQL,,可以減少數(shù)據(jù)庫(kù)的操作,。


可能的場(chǎng)景:

1、同一個(gè)object,,如一個(gè)person在seession里保存了一份,,而增加的別的object,如company的時(shí)候,,由于做了關(guān)聯(lián)關(guān)系,,從數(shù)據(jù)庫(kù)里又get了一個(gè)person,而這個(gè)person和seession里的person是同一個(gè),把get出來(lái)的person   set 到了company里,,像這樣,,compnay.setPerson(person).在增加company的時(shí)候就出現(xiàn)了這個(gè)錯(cuò)誤。

2,、在同一個(gè)session內(nèi),,如果已經(jīng)有一個(gè)對(duì)象已經(jīng)是持久化狀態(tài)(load進(jìn)來(lái)等),現(xiàn)在構(gòu)造一個(gè)新的PO,,和前一個(gè)持久化對(duì)象擁有相同的持久化標(biāo)識(shí)(identifier),,在update的時(shí)候,就會(huì)拋這個(gè)錯(cuò)誤,。如:

  1. User user1 = session.load(1);  
  2. User user2 = new User();  
  3. user2.setId(1);//此時(shí)ID和user1一樣  
  4. user2.setUsername("lalala");  
  5. session.update(user2);//這里會(huì)拋出錯(cuò)誤  


3,、。。,。。,。


解決辦法:

1.不要重新new一個(gè)對(duì)象,,使用load的對(duì)象對(duì)他進(jìn)行更改值。
例如上面例子直接對(duì)user1操作,,最后更新user1
2.如果是hibernate3以上,,可以使用session.merge()方法
3.把session中同標(biāo)識(shí)的對(duì)象移出(session.evict(user1)),使他成為脫管的狀態(tài),,然后user2就可以u(píng)pdate了,。


參考http:///2011/04/org-hibernate-nonuniqueobjectexception.html


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多