2012-06-01 2 views
7

Я использую этот код в спящем режиме.Стратегия сгенерированного спящего режима

@Id @GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name="RightID", unique=true, nullable=false) 

Проблема в том, что, когда я удаляю строку, «RightId» не остается в последовательности. Я хочу что-то подобное, спящий режим должен проверять идентификатор, если отсутствует какое-то значение id, оно должно указывать на это значение в «Правке» иначе, как обычно,

ответ

4

База данных не заботится, есть ли в последовательности отверстия. Также в целом возможно и, скорее всего, проще изменить дизайн приложения, чтобы он не ожидал, что список значений id не будет содержать отверстия.

Если какая-то странная причина заставляет такую ​​конструкцию, вы должны использовать специальный генератор. Детали реализации можно найти по этому вопросу: Hibernate ID Generator

9

Я не думаю, что в спящем режиме есть такой оптимум. Вместо AUTO, вы можете попробовать следующие варианты стратегии также:

  1. GenerationType.TABLE - поставщик живучесть использует таблицу базы данных для управления ключами.

  2. GenerationType.SEQUENCE - поставщик сохранения использует последовательность баз данных для генерации ключей. База данных должна поддерживать Последовательности

  3. GenerationType.IDENTITY - провайдер постоянства переадресовывает базу данных для генерации ключей. База данных должна поддерживать тип столбца IDENTITY.

Другой вопрос: они, возможно, не предоставили такой вариант, так как это также замедлит работу. Для каждой вставки необходимо будет выполнить поиск по целому ID. Вы можете себе представить, насколько это повлияет на производительность.

0

Основная причина, по которой это не поддерживается внутри, - security. позвольте мне дать вам пример,

1. Безопасности

У нас есть база данных для мобильного SimCards, которая имеет уникальный идентификационный номер. Если ваш сим потерян, а затем вы его деактивируете. Но скажем, что какой-то другой пользователь купил новый сим, и этот сима получил старый уникальный номер, который у вашего сима (по вашей логике). Тогда это может привести к проблеме. Как можно сказать, что новый пользователь совершил какой-то террористический акт, тогда полиция собирается отследить этот номер сима и может прийти к вам (поскольку он был новым пользователем, а некоторые в местах, где sim все еще показывает ваше имя) ...

2 . Задержка

И определенно исполнение вопрос есть. Каждый поиск для поиска неиспользуемого номера последовательности будет O (n) вместо прямого O (1).

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