在做Hibernate持久化操作的時(shí)候,Hibernate報(bào)出could?not synchronize database state with session的錯(cuò)誤,引起此錯(cuò)誤的原因眾多
但是緊接著下面報(bào)出DB2的錯(cuò)誤STATE: 23502,在網(wǎng)上查找,此錯(cuò)誤是因?yàn)橄驍?shù)據(jù)庫(kù)的非空字段插入空值引起的,但是Hibernate沒(méi)有報(bào)錯(cuò)呀,仔細(xì)檢查了Hibernate映射文件,沒(méi)有發(fā)現(xiàn)有not-null屬性,用斷點(diǎn)跟蹤,也沒(méi)有發(fā)現(xiàn)對(duì)象有空值出現(xiàn)。
于是,再次來(lái)到數(shù)據(jù)庫(kù)查看,突然發(fā)現(xiàn)數(shù)據(jù)庫(kù)怎么多出一個(gè)字段??
用映射文件對(duì)比數(shù)據(jù)庫(kù),果然,數(shù)據(jù)庫(kù)多出一個(gè)字段,而且是非空,由此看來(lái),問(wèn)題應(yīng)該就出在這里了,手動(dòng)映射字段,再次做持久化操作,一切正常!
由此可見(jiàn),Hibernate捕獲了底層數(shù)據(jù)庫(kù)一場(chǎng),重新拋出一個(gè)Hibernate異常,但是信息不是很完整,還需要根據(jù)數(shù)據(jù)庫(kù)提示來(lái)進(jìn)行操作
吃一塹長(zhǎng)一智!