Hibernate常見問題 No row with the given identifier exists問題的一次實戰

   最近接到了一個需求,說是網站點擊鏈接報錯,經過數據追蹤後發現是因爲數據展示的時候,是聯合了多張表的數據進行展示,在點擊鏈接時根據寫死的值去數據庫查找對象,這次查找的對象表關聯了很多其它表的數據,是多對多的關係,兩張表在hibernate.hbm.xml配置爲了雙向多對多,數據來源是通過很多層的數據表相關聯產生的,比如鏈接直接指向的表對象爲A,A表又和B表形成雙向多對多,B表又和C表形成單項多對多.....這樣層層關聯了很多數據,鏈接跳轉報錯時,在後臺出現了No row with the given identifier exists 錯誤提示,我就去查看了數據表的配置關聯,關係如圖:

 

 

可以看到,BussPublicCase 與BussPublicInfo之間是雙向多對一的關係,而在BussPublicInfo與BussDir之間又是單向多對一,因爲BussDir沒有指向前兩張表的數據所以就不上圖了,下面是運行時後臺報的錯

分析可以得出,是因爲通過查找BussPublicCase 對象關聯到BussPublicInfo對象時,因爲BussPublicInfo又關聯了BussDir,因爲是單項多對一,而且沒有指明關聯的屬性,所以默認爲關聯到BussDir的主鍵上,而主鍵不能爲null,所以推測在BssPublicInfo 的關聯列中混入了BussDir主鍵所沒有對應的數據,於是進行了查詢

果然有發現一些關聯的列對不上的數據,正是鏈接訪問時讀取了這些沒關聯上的數據所以纔會報錯,數據來源因爲不在這次需求範圍之內所以暫且先不去細究,將沒關聯上的數據刪掉後,網站跳轉鏈接恢復了正常,下面是參考別人的資料,關於應對這種情況的解決方法,資料出處:http://www.cnblogs.com/zsychanpin/p/7049141.html 

 


(1)在學習Hibernate的時候遇到了這個問題“No row with the given identifier exists”在網上一搜看到非常多人也遇到過這個問題!

問題的解決辦法肯定是有多種,下面解決比較可能的原因。

(2)我說一下當時我出現錯誤的時候,是利用hibernate動態創建數據庫的。錯誤提示的信息是對象未找到而發出異常!

 

然後後邊的是未找到的文件路徑,可是細緻檢查並沒有錯誤!可是看下邊的解釋錯誤出現的原因:SessionFactoryImpl還有SessionImple有關的

 

這就快非常easy想到是由於處理數據庫的原因造成的!然後在看到最後的一個錯誤 即是我項目下的TestMain.java:16 處點進去!恍然大悟 原來是我調用的函數是“刪除操作”(想把自己hu死!

) 想一下我的數據庫是動態創建的一開始肯定沒有數據 所以出現刪除失敗!

 

 

(3)通過我解決這個問題的方法。大家的問題也非常可能是操作數據庫表示出現的錯誤!

 

(4)試想一下! 

 

1.如果有兩張表,table1和table2.產生此問題的解決辦法就是table1裏做了關聯table2的時候(一對一或者是 多對一).當hibernate通過table1查找的時候,table2裏的數據沒有與table1相匹配的,這樣就會報No row with the given identifier exists這個錯.(一句話,就是數據的問題!)

 

        2.假如說,table1裏有自身的主鍵id1,還有table2的主鍵id2(作爲table1的外鍵),這兩個字段.

 

        3.假設hibenrate設置的單項關聯,即使table1中的id2爲null值,table2中id2中有值,查詢都不會出錯.可是假設table1中的id2字段有值,可是這個值在table2中主鍵值裏並沒有,就會報上面的錯!

 

        4.假設hibernate是雙向關聯,那麼table1中的id2爲null值,可是table2中假設有值,就會報這個錯.這樣的情況眼下的解決的方法就是改成單項關聯,或者把不正確應的數據改對!

 

5.假如說我推斷一下,假設遇到創建人id傳過來爲空值,我推斷假設是空值,我把創建人id設爲0,可是用戶表中userid是主鍵從1開始自增的,那麼這樣數據就相應不上了,一查就會出這個錯了.這個錯在開發剛開始的時候常常發生,由於每一個人的模塊都是由相應的人獨立開發完畢以後再整合在一起的,每一個人寫單獨那一塊的時候往往會忽略這些,所以整合的時候這些問題往往就都一下子全冒出來了!

 

        6.這就是報這個錯的原因了,知道原因了就對應的改即可了!

 

 

(5)在(4)中已經列舉了幾個出現這個問題的解決辦法 可能遇到的問題的解決辦法並非這些可是根本原因是操作數據庫的時候出現錯誤!自己好好檢查數據庫的操作希望能成功。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章