2017-03-08 29 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服务器日志,我相信会告诉你他们执行查询失败,或者可能警告无效值。

相关问题