2012-01-06 2 views
0

У нас есть приложение, в котором мы используем секвенцию таблицы. Каждый раз, когда мы отказываемся от сервера, порядковый номер (здесь SEQ_R) в таблице действует странно. Последовательный номер увеличивается на 90000 и время от времени на 50. Где, приращение должно быть на 1.переходные последовательности с чередованием по размеру preallocation

Я должен упомянуть, что мы используем сервер MSSQl.

В нашем sessions.xml

<sequencing> 
    <default-sequence xsi:type = "table-sequence"> 
    <name> Custom </name> 
    <preallocation-size> 80000 </preallocation-size> 
    <table> SEQ </table> 
    <name-field> SEQ_N </name-field> 
    <counter-field> SEQ_R </counter-field> 
    </default-sequencing> 
</sequencing> 

В нашем mappings.xml

<toplink:sequencing> 
    <toplink:default-sequence xsi:type = "toplink:native"> 
    <toplink:preallocation-size> 80000 </toplink:preallocation-size> 
</toplink:default-sequence> 
</toplink:sequencing> 
+0

любые идеи по этому вопросу? – user1076285

ответ

1

Вся идея в том, что предраспределения TopLink увеличит последовательность в базе данных 80000, и сохраняет счетчик в памяти для следующих 80000 элементов, которым нужен новый идентификатор. Если вы отскакиваете от сервера, счетчик в памяти теряется, а toplink считывает и обновляет последовательность базы данных снова для следующей партии.

Если вы действительно хотите увеличить на 1, вы можете использовать столбец IDENTITY в MSSQL. См. Toplink Native Sequencing With a Non-Oracle Database Platform

+0

, но столбцы идентификаторов не поддерживаются форплинком в нашей организации. – user1076285

+0

Я бы не волновался тогда :-). Нет, на самом деле, если сгенерированные идентификаторы различны, все в порядке. Приращение на 1 не является действительно необходимым. – greyfairer

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