2017-03-08 30 views
0

我正面臨一個問題,刪除由休眠讀取的實體。像數據庫,並立即刪除沒有任何變化的實體負荷實體簡單的調用,只是加入失敗休眠/ MySQL - 批量更新返回意外的行數和ASCII字符

org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException:批量更新從更新[0]返回了意外的行數;實際行數:0;預計:1;嵌套異常是org.hibernate.StaleStateException:批處理更新從update [0]返回意外的行計數;實際行數:0;預計:1

我終於追溯到一個錯誤的字符串,其後有ascii字符 - 239(0xef),191(0xbf)和189(0xbd)。刪除這些字符後,一切正常。由於hibernate delete調用在刪除時匹配where子句中的所有字段,因此在字符串中存在這些字符時調用失敗。

似乎在我們的設置中存在字符編碼的問題,因爲hibernate返回的實體/列不能用作條件中where子句的一部分 - 或者某些東西在翻譯中丟失了。

我應該怎麼辦 - MySQL的安裝或休眠設置,使這些問題能在未來

回答

0

我記得我曾經打電話給SET CHARACTER SET「UTF-8'`在每個MySQL的會議開始時避免。這是在PHP中。現在Hibernate/JDBC應該可以處理這個問題,但是您仍然需要在服務器和客戶端上進行設置。

請參閱the server configJDBC config

您需要將數據庫,連接和客戶端編碼全部對齊。
編輯:另外請注意,表和列可能有自己的編碼,所以檢查在INFORMATION_SCHEMA

此外,我也建議觀看MySQL服務器日誌,我相信會告訴你他們執行查詢失敗,或者可能警告無效值。

相關問題