Jpa hibernate序列预分配

时间:2012-09-25 10:59:24

标签: hibernate orm jpa-2.0 eclipselink

我一直在阅读JPA文档,并在分配序列ID的同时遇到了预分配的事情。

虽然明显的表演原因非常好。 但我正在考虑可以搞砸事情的场景。

据我所知,当我们使用表序列或排序对象作为生成序列的策略时设置分配大小= 100时,像hibernate或Eclipse链接这样的持久性提供程序将维护内存计数器,并且用于插入记录的应用程序代码不会有为每个插入去数据库。

当内存计数器达到100时,数据库序列增加100并继续相同的故事。 一切都好到现在。

但是说我们在制作中遇到了一个错误,我们发现某些表中的记录没有插入到数据库中。

所以我们准备脚本在DB中插入这些记录,现在我们给表的主键赋予了什么值。如果我们从DB获取值,那么当应用程序尝试时它很可能会发生冲突使用内存计数器插入记录,并提供SQL异常。

有人遇到过这样的问题吗? 处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

确保在脚本中使用与Hibernate生成器相同的策略。例如,如果序列位于2300,并且Hibernate生成器将序列递增100并生成ID 2301到2400而不转到序列,请在脚本中执行相同操作。

或者停止应用程序,运行脚本,并使用保证Hibernate生成器不会生成已使用ID的值重新生成序列。