2009-06-24 2 views
0

다음과 같은 문제가 발생하며 적절한 해결 방법을 찾을 수 없습니다. id, x (외래 키), y (시퀀스 번호) 및 z (내용) 속성과 관계 A가 있습니다. 또한 x-y에는 고유성 제약이 있습니다. 그것은 보통 (455, 159, 1, ...), (456, 159, 2, ...), (457, 159, 3, ...) 등과 같은 튜플을 가지고 있습니다. 최대 절전 모드 이것이 특정 클래스의 매핑 테이블입니다. 이제는 새로운 객체를 삽입하거나 기존 객체를 제거하고 다른 객체의 시퀀스 번호를 업데이트하려는 사용 사례가 있습니다. 예를 들어, 새 개체를 삽입 한 직후에는 순서 번호 2를 가져오고 이전에 2 인 개체는 3이되어야하고 3은 4가되어야합니다. 개체 2를 삭제할 때 비슷한 일이 발생해야합니다. 그러면 2가되어야합니다.MySQL/최대 절전 모드에서 중복 항목 오류가 발생했습니다.

그러나 업데이트가 트리거되면 ConstraintViolationException이 발생합니다.

SEVERE: Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update ... Caused by: java.sql.BatchUpdateException: Duplicate entry '159-2' for key 2

이런 일이 발생하는 이유는 확실히 설명 할 수 없다. 저기 커밋/세션 플러시, 그래서 나는 최대 절전 모드/MySQL은 시간적 불일치를 처리 할 수 ​​있지만 커밋에 대한 제약을 확인합니다. 누락 된 것이 있거나 중요한 해결 방법 없이는이 작업을 수행 할 수있는 방법이 있습니까?

건배

답변

1

일부 ID 생성기는 ID를 얻기 위해 DB로 직접 이동해야합니다. 세션을 약속하지 않은 경우에도 당신이 삽입을 수행하고 ID를 검색합니다 save()를 호출 할 때 MySQL의에 자동 증가 컬럼과 native 생성기를 사용하여 예를 들어

.

Hibernate 관리 발전기로 이동하십시오.

+0

확인 - 약간의 오해가 있습니다. 내 잘못 : 관계는 또 다른 자동 생성 ID 속성이 있습니다. 외래 키/시퀀스 번호에 대한이 추가 고유성 제약 조건이 있습니다. – VHristov

관련 문제