收集:Hibernate中常見問題 No row with the given identifier exists問題的原因及解決

來源:互聯網
上載者:User
 Hibernate中 No row with the given identifier exists問題的原因及解決

            產生此問題的原因:

             有兩張表,table1和table2.產生此問題的原因就是table1裡做了關聯<one-to-one>或者<many-to-one unique="true">(特殊的多對一映射,實際就是一對一)來關聯table2.當hibernate尋找的時候,table2裡的資料沒有與table1相匹配的,這樣就會報No row with the given identifier exists這個錯.(一句話,就是資料的問題!)

           假如說,table1裡有自身的主鍵id1,還有table2的主鍵id2,這兩個欄位.

          如果hibenrate設定的單項關聯,即使table1中的id2為null值,table2中id2中有值,查詢都不會出錯.但是如果table1中的id2欄位有值,但是這個值在table2中主索引值裡並沒有,就會報上面的錯!

         如果hibernate是雙向關聯,那麼table1中的id2為null值,但是table2中如果有值,就會報這個錯.這種情況目前的解決辦法就是改成單項關聯,或者把不對應的資料改對!

           這就是報這個錯的原因了,知道原因了就相應的改就行了.或許還有些人迷惑hibernate關聯都配好了,怎麼會出現這樣的錯?其實這是編程的時候出現的問題,假如說我在添加資訊的時候,頁面傳過來的struts的formbean到dao方法中需要封裝成hibernate的po(就是hibenrate的bean),要是一個個po.get(form.set())實在太麻煩了,這樣一般都會寫個專門的方法來封裝,遇到po.get(form.set())這種情況直接把struts的formbean對象傳到此方法中封裝就行了,假如我有個欄位是建立人id,那麼這個欄位是永遠不會改的,我在添加的時候還調用這個方法,這個專門封裝的方法是有一些判斷的,假如說我判斷一下,如果遇到建立人id傳過來為空白值,我判斷如果是空值,我把建立人id設為0,但是使用者表中userid是主鍵從1開始自增的,那麼這樣資料就對應不上了,一查就會出這個錯了.這個錯在開發剛開始的時候經常發生,因為每個人的模組都是由相應的人獨立開發完成以後再整合在一起的,每個人寫單獨那一塊的時候往往會忽略這些,所以整合的時候這些問題往往就都一下子全冒出來了....整合很辛苦,tnnd!

 

 

hibernate的查詢的比較
hibernate的查詢有很多,Query,find,Criteria,get,load

query使用hsql語句,可以設定參數是常用的一種方式

criteria的方式,盡量避免了寫hql語句,看起來更物件導向了。

find方式,這種方式已經被新的hibernate丟棄

get和load方式是根據id取得一個記錄
下邊詳細說一下get和load的不同,因為有些時候為了對比也會把find加進來。

1,從返回結果上對比:
load方式檢索不到的話會拋出org.hibernate.ObjectNotFoundException異常
get方法檢索不到的話會返回null

2,從檢索執行機制上對比:
get方法和find方法都是直接從資料庫中檢索
而load方法的執行則比較複雜
1,首先尋找session的persistent Context中是否有緩衝,如果有則直接返回
2,如果沒有則判斷是否是lazy,如果不是直接存取資料庫檢索,查到記錄返回,查不到拋出異常
3,如果是lazy則需要建立代理對象,對象的initialized屬性為false,target屬性為null
4, 在訪問獲得的代理對象的屬性時,檢索資料庫,如果找到記錄則把該記錄的對象複製到代理對象的target
上,並將initialized=true,如果找不到就拋出異常 。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.