2012-02-01 2 views
3

Я использую Hibernate в своем проекте Java, у меня есть Oracle DB. Столбец ID, я определил последовательность с приращением 1. Но это как JPA/Hibernate получает NEXTVAL из последовательности:Слишком много прироста по последовательностям Oracle по JPA/Hibernate

1 1451 
2 1450 
3 1402 
4 1401 
5 1400 
6 1352 
7 1351 
8 1350 
9 426 

Вы можете видеть, что NEXTVAL иногда получить 1, но в основном 50 или более. Я вижу даже начало последовательности 200, хотя я ставлю начальное значение 1. Почему это происходит? Это нормально?

Могу ли я уменьшить этот шаг «50» как-то?

Edit: Дубликат hibernate oracle sequence produces large gap

+0

Был Oracle за это время? –

+2

См. Http://stackoverflow.com/questions/5346147/hibernate-oracle-sequence-produces-large-gap Также возможно дублировать. –

+0

Спасибо, Vineet Reynolds. Я проверю его. –

ответ

6

Я нашел это решение;

  1. Я сделал кэш последовательности, как "не-кэш"
  2. я поставил "allocationSize=1" в аннотации @SequenceGenerator из @Id собственности, как это было описано здесь: https://stackoverflow.com/a/5346701/169534

Проблема решена

0

Если последовательность имеет размер кэша 50 вы можете увидеть этот вопрос, если база данных становится завершение работы между вашими выборками из последовательности. Оставшиеся кешированные значения никогда не будут использоваться, когда база данных отключится.

+0

Нет, в DB нет выключения так часто, даже если «выключение» происходит только при некоторых критических значениях высокой нагрузки. –

+0

Вы правы в кэш-памяти, но не нужно останавливать базу данных. В основном Oracle будет кэшировать 50 очередников, а если не использовать, может возрасти из кеша. В следующий раз, когда вызывается nextval, будет кэшироваться еще 50 значений (отбрасывание предыдущих в кеше). – tbone

+1

Если я создам/изменю значение кеша как «no-cache» в последовательности, будет ли это решением для него? И будет ли это проблемой как-то? –

Смежные вопросы