Существует ли практический способ мигрировать от столбцов идентификационных данных до ключей Хило?

Я думаю, что вопрос - сложный код немного лучше? Это быстрее, более надежно? Цель состоит в том, чтобы записать лучшие программы, если сложный код является лучшим решением тогда, просто необходимо записать лучшие комментарии так, чтобы преемник мог управлять кодом в будущем. В принципале код должен быть максимально простым в любой данной ситуации.

15
задан Jack Ryan 7 September 2009 в 16:25
поделиться

2 ответа

Если это вопрос о переносе существующего приложения в hilos, который ранее использовал автоматические идентификаторы, и в нем есть старые данные, которые необходимо перенести ... тогда это будет мой лучший выбор (хотя не пробовал! - комментарии приветствуются!):

  • Измените идентификаторы типов столбцов на bigints
  • узнайте максимальное значение идентификатора в настоящее время находится в любой таблице.
  • Установите для вашего «следующего высокого» значение в исходной таблице hilo на значение выше, чем вы нашли в идентификаторах

Если, конечно, это решает только проблемы со столбцом идентификаторов, а не что-либо еще в вашем схему, которую может потребоваться изменить, если вы перемещаете приложение в NHibernate.

8
ответ дан 1 December 2019 в 03:24
поделиться

Вам необходимо настроить таблицу, используемую NH, чтобы правильно создавать значения HiLo. Позвольте Schema Creator создать таблицу в соответствии с вашими определениями сопоставления, установить значения в соответствии с текущим состоянием идентификаторов в вашей базе данных.

Я считаю (вам необходимо это проверить), что значения, сгенерированные hilo, вычисляются следующим образом:

hilo-id = high-value * max_lo + low-value

Пока максимальное значение хранится в базе данных, max_low определяется в файле сопоставления, а низкое значение вычисляется во время выполнения.

hilo-id = high-value * max_lo + low-value

1263] NHibernate также требуется собственное соединение и транзакция для определения и увеличения высокого значения. Следовательно, он не работает, если соединение предоставляется приложением.

Вы все еще можете использовать seqhilo , NH использует последовательность базы данных для создания следующих высоких значений и не требует отдельного подключения для этого . Это доступно только в базах данных, поддерживающих последовательности, таких как Oracle.


Исправление:

Между тем, мне пришлось реализовать это самому (раньше это было просто теорией :-). Итак, я возвращаюсь, чтобы поделиться подробностями.

Формула:

next_hi = (highest_id / (maxLow + 1)) + 1

next_hi - это поле в базе данных, которое вам нужно обновить. high_id - это самый высокий идентификатор, найденный в вашей базе данных. maxLow - это значение, которое вы указали в файле сопоставления. Понятия не имею, почему он увеличивается на единицу. Деление представляет собой целочисленное деление, при котором десятичные знаки обрезаются.

high_id - это самый высокий идентификатор, найденный в вашей базе данных. maxLow - это значение, которое вы указали в файле сопоставления. Понятия не имею, почему он увеличивается на единицу. Деление представляет собой целочисленное деление, при котором десятичные знаки обрезаются.

high_id - это самый высокий идентификатор, найденный в вашей базе данных. maxLow - это значение, которое вы указали в файле сопоставления. Понятия не имею, почему он увеличивается на единицу. Деление представляет собой целочисленное деление, при котором десятичные знаки обрезаются.

14
ответ дан 1 December 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: