我们有一个使用表排序的应用程序,每次我们将表中的序列号(这里为SEQ_R)退回服务器时,都会奇怪,序列号递增90000,有时递增50,其中递增应为1。

我不得不提到我们使用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>

最佳答案

预分配的整个思想是toplink将数据库中的序列增加80000,并在内存中为需要新ID的接下来的80000项保留一个计数器。如果您启动服务器,则内存中计数器将丢失,并且toplink会为下一批再次读取并更新数据库序列。

如果您确实希望增加1,则可以在MSSQL中使用IDENTITY列。见Toplink Native Sequencing With a Non-Oracle Database Platform

09-26 09:49