我正在使用 NamedParameterJdbcTemplate.batchUpdate 将一批行插入数据库。该方法的第三个参数是一个 KeyHolder 实例,我可以使用它通过
KeyHolder.getKeyList()
方法检索生成的密钥列表。
我的问题是:getKeyList()结果中值的顺序是否对应于通过
batchUpdate()
插入的行的顺序?
(例如,如果我批量插入行
A, B, C
,那么是否可以保证getKeyList()
按此顺序返回A.id, B.id, C.id
?因此,我可以将两个列表压缩在一起以了解哪个插入的条目收到了哪个生成密钥?)
首先回答您的问题,如果不确定,您应该循环遍历这些值,根据需要对其进行快速排序。不想依赖您无法控制的东西,除非您知道它是如何工作的,并且有某种类型的文档或表达这种保证的东西。如果这是一个瓶颈,那么看看像 MarkLogic 这样的数据库可能是值得的。但不认为这是一个。
其次,当使用生成的 ID 时,我相信它们对于使用它们的应用程序来说应该是任意的,因为它可以随时重新索引和更改。因此,出于稳定性原因,应用程序不应使用此索引。如果插入时间对于查询很重要,那么应该添加一个字段来查询,而不是基于数据库中的顺序。通常您会创建并修改时间戳,因为如果数据库完成,它可能会转到另一个系统,直到它备份也会影响时间。
如果 ID 很重要,那么为其创建一个有意义且不会在您的应用程序下更改的实际字段。