1

我有一个巨大的简单对象 java 列表,存储在数据库中,通过索引列维护元素的位置。我使用休眠但自己管理列表,因为它太大而无法存储为集合。

在对列表进行一些更改(添加、删除、移动)之后,我想通过手动更新索引列并通过休眠插入新的分别删除的元素来将更改保留在数据库中。

现在,(1)是否有一种有效的算法如何将列表增量组合到尽可能少的 sql 语句 - 或者(2)我是否必须记录每个更改并逐步应用它?

4

1 回答 1

1

您可以尝试维护巨大列表段的索引更改。例如,在包含 1000 个项目的列表中,如果您:

  • 在位置 99 和 199 插入新项目,
  • 将项目 2 移动到位置 6,
  • 并删除项目 277,

您可以使用 HQL 执行以下操作:

  • 删除项目 277
  • 更新项目集索引 = 6 其中索引 = 2
  • 更新项目集索引 = index-1,其中索引在 3 和 6 之间(并且它不是上一个项目 - 注意重叠)
  • 更新项集 index = index+1 其中 index 介于 278 和 1000 之间
  • 更新项集索引 = index+2 其中索引在 199 和 276 之间
  • 更新项集 index = index+1 其中 index 介于 99 和 198 之间
  • 插入项目 99 和 200

我还没有准备好研究算法的细节,只会说你需要维护一个集合段列表和每个段的偏移量。

于 2011-02-02T14:50:26.480 回答