我有一个巨大的简单对象的 java 列表,存储在数据库中,通过索引列维护元素的位置。我使用 hibernate 但自己管理列表,因为它太大而无法作为集合存储。
在对列表进行一些更改(添加、删除、移动)后,我想通过手动更新索引列并插入新的分别通过 hibernate 删除元素来将更改保存在数据库中。
现在,(1) 是否有一种有效的算法如何将列表增量组合为尽可能少的 sql 语句 - 或者 (2) 我是否必须记录每个更改并逐步应用它?
最佳答案
您可以尝试为巨大列表的片段维护索引更改。例如,在包含 1000 个项目的列表中,如果您:
- 在位置 99 和 199 插入新项目,
- 将项目 2 移动到位置 6,
- 并删除第 277 项,
您可以使用 HQL 执行以下操作:
- 删除项目 277
- 更新项目集索引 = 6,其中索引 = 2
- 更新项目集索引 = index-1,其中索引在 3 到 6 之间(并且它不是之前的项目 - 注意重叠)
- 更新项目集索引 = 索引+1 其中索引在 278 和 1000 之间
- 更新项目集索引 = 索引+2 其中索引在 199 和 276 之间
- 更新项目集索引 = 索引+1 其中索引在 99 和 198 之间
- 插入项目 99 和 200
我还没准备好研究算法的细节,只是说你需要维护一个集合段列表和每个段的偏移量。
关于java - 如何有效地应用数据库中巨大列表的多个位置变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4872641/