Последовательный и непрерывный номер счета в Hibernate / ColdFusion ORM? - PullRequest
2 голосов
/ 28 ноября 2009

Одним из требований моего программного обеспечения для выставления счетов является то, что номер счета должен быть последовательным и непрерывным. (номер счета не может быть пропущен).

Я попытался установить номер счета-фактуры как PK, и попробовал приращение и собственный генератор hibernate, но оба они не гарантируют непрерывное число при сбое транзакции. Следующий счет будет иметь следующий номер счета, который вводит пробел (не непрерывный).

Что мне делать?

Использовать invoiceID в качестве PK, установить invoiceNumber в качестве столбца Nullable и установить номер счета в postInsert () с помощью поточно-безопасного генератора чисел?

1 Ответ

4 голосов
/ 28 ноября 2009

Да, вам необходимо самостоятельно присваивать номера счетов-фактур, если вы хотите, чтобы они были непрерывными (т.е. последовательными).

Автоматические методы генерации значений псевдоключей склонны к наличию пробелов, потому что в обычных условиях вы можете иметь ROLLBACK или DELETE и оставить пробел.

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

Генераторы для псевдокей гарантируют быть уникальными, но не последовательными.

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

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