2017-03-08 1 views
0

최대 절전 모드로 읽는 엔티티를 삭제하는 중 문제가 발생했습니다. 변경없이 개체를 삭제 즉시 데이터베이스에서로드 엔티티와 같은 간단한 호출이 예외로 실패했다Hibernate/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의 설치 또는 이러한 문제는 내가 'UTF-8'` 각 MySQL의 세션의 시작 부분에 SET 문자 집합을 호출하는 데 사용되는 기억의 미래

답변

0

에 방지 할 수 있도록 설정을 최대 절전 모드 - 어떻게해야합니까

. 그것은 PHP에서였습니다. 이제 Hibernate/JDBC는 이것을 처리해야하지만, 여전히 서버와 클라이언트 모두에서 설정해야한다.

the server configJDBC config을 참조하십시오.

데이터베이스, 연결 및 클라이언트 인코딩이 모두 정렬되어 있어야합니다.
편집 : 또한 테이블과 열은 자체 인코딩을 가질 수 있으므로 INFORMATION_SCHEMA에서 확인하십시오.

또한 MySQL 서버 로그를 보면서 쿼리 수행에 실패했거나 유효하지 않은 값에 대해 경고 할 것이라고 알려주는 것이 좋습니다.

관련 문제

 관련 문제