Используя @GeneratedValue (стратегии = GenerationType.TABLE), sequence_next_hi_value представляет собой int (11), но моя таблица имеет столбец id bigint (20) - PullRequest
3 голосов
/ 26 октября 2010

Я использую @Id с @GeneratedValue (стратегии = GenerationType.TABLE), только что проверил, что hibernate создал таблицу hibernate_sequence, но тип столбца для sequence_next_hi_value - int (11).У меня есть некоторые объекты (я имею в виду таблицы), которые имеют поле id типа bigint (20), это будет работать?и когда моя таблица достигнет ожидаемого количества строк?

спасибо

1 Ответ

12 голосов
/ 26 октября 2010

(...) hibernate создал таблицу hibernate_sequence, но тип столбца для sequence_next_hi_value - int (11).У меня есть некоторые объекты (я имею в виду таблицы), которые имеют поле id типа bigint (20), это будет работать?

Да, это будет работать.

и когда моя таблица достигнет ожидаемого числа строк?

Я не уверен, что понял эту часть.Но если вопрос касается исчерпания номеров, вот некоторые цифры из вики-книги JPA:

Исчезновение чисел

Один параноидальный бредовый страху программистов часто заканчиваются порядковые номера.Поскольку большинство последовательных стратегий просто увеличивают число, неизбежно, что вы в конечном итоге закончите.Однако, если для хранения идентификатора последовательности используется достаточно большая числовая точность, это не проблема.Например, если вы сохранили свой идентификатор в столбце NUMBER (5), это позволит использовать 99 999 различных идентификаторов, которые в большинстве систем в конечном итоге закончатся. Однако, если вы храните свой идентификатор в столбце NUMBER (10), что более типично, он будет хранить 9 999 999 999 идентификаторов или один идентификатор каждую секунду в течение примерно 300 лет (дольше, чем существует большинство баз данных).Но, возможно, ваша система будет обрабатывать много данных и (надеюсь) будет работать очень долго.Если вы храните свой идентификатор в NUMBER (20), это будет 99 999 999 999 999 999 999 идентификаторов или один идентификатор каждую миллисекунду в течение 3 000 000 000 лет, что довольно безопасно.

Но вам также нужно хранить этот идентификатор в Java.Если вы храните идентификатор в Java int, это будет 32-битное число, что составляет 4 294 967 296 различных идентификаторов, или один идентификатор каждую секунду в течение 200 лет.Если вместо этого вы используете long, это будет 64-битное число, что составляет 18 446 744 073 709 551 616 различных идентификаторов, или один идентификатор каждую миллисекунду в течение 600 000 000 лет, что довольно безопасно.

IMO, int (11) с размером выделения по умолчанию 50 дает вам некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...