解決方法:改爲單項關聯,或者把不對應的數據改對! 編程
產生此問題的緣由:
有兩張表,table1如用戶表user,和table2角色表role.產生此問題的緣由就是table1裏作了關聯<one-to-one>或者<many-to-one unique="true">(特殊的多對一映射,實際就是一對一)來關聯table2.
當hibernate查找的時候,table2角色表role裏的數據沒有與table1用戶表user相匹配時,這樣就會報No row with the given identifier exists這個錯.(一句話,就是數據的問題!)
假如說,table1用戶表user裏有自身的主鍵id1,還有table2角色表role的主鍵id2(實際上是table2角色表role的外鍵),這兩個字段.
若是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開始自增的,那麼這樣數據就對應不上了,一查就會出這個錯了.這個錯在開發剛開始的時候常常發生,由於每一個人的模塊都是由相應的人獨立開發完成之後再整合在一塊兒的,每一個人寫單獨那一塊的時候每每會忽略這些,因此整合的時候這些問題每每就都一會兒全冒出來了ide