2014-02-11 4 views
0

최대 절전 모드 4.1.6에서 사용하려고하는 기존 데이터베이스 스키마가 있습니다. Oracle을 포함하여 여러 데이터베이스 버전을 지원해야하므로 ID 생성에 SequenceStyleGenerator를 사용하고 있습니다. 오라클의 생성기와 함께 사용하기 위해 만들어진 시퀀스가 ​​있습니다.Hibernate가 시퀀스에서 1을 뺍니다.

시퀀스에 기존 값 (예를 들어 2)이있는 경우 엔티티에서 저장 또는 업데이트를 호출 할 때 Hibernate가 시퀀스의 nextval을 호출하여 다음 값을 얻고 3을 얻는 것을 볼 수 있습니다. 그런 다음 어떤 이유로 (Hibernate 클래스 OptimizerFactory에서), Hibernate는 시퀀스 값에서 1을 뺀다. 사용하는 id를 얻는다. 이것은 유일 제약 에러 때문에 실패한다. nextval이 3이면 2가 이미 사용된다.

왜 ID에 사용할 값을 얻기 위해 Hibernate가 시퀀스에서 1을 뺀 것이고, 그 시퀀스를 그대로 사용하는 방법은 무엇입니까?

+0

지금까지 시도한 코드를 추가 할 수 있습니까? –

답변

0

SequenceStyleGenerator에 대해 풀 된 최적화 도구를 사용하고 있는데 문제가 그와 관련이 있습니다. Hibernate 문서는 풀링 된 옵티 마이저를 사용할 때 '메모리 그룹화 알고리즘과 결합 된 순차 값이 아니라 단순히 "다음 그룹"의 시작 값을 데이터베이스 구조에 저장한다고 말합니다. 그래서 나는 Hibernate가 nextval을 읽고 3을 얻을 때, 다음 그룹의 시작 값으로 사용하는 currval을 얻기 위해 하나를 뺍니다.

나는 "none"을 옵티 마이저에 사용하려고 시도 할 것이다 ... 풀 된 옵티 마이저에 대해 더 설명하는 문서를 찾거나 하이버 네이트 이외의 애플리케이션이 데이터를 사용하여 같은 순서.

관련 문제