hibernate生成器递增句柄是如何删除的

时间:2011-07-13 06:56:14

标签: hibernate

这就是我使用生成器的方式:

    <id name="id" column="column_name">
        <generator class="increment"/>
    </id>

private Integer id;

我看到的行为是:

  1. 创建第一个对象
  2. hibernate指定id = 1
  3. 删除该对象
  4. 关闭服务器并重新启动它(在答案后添加)
  5. 创建第二个对象
  6. hibernate assignes id = 1
  7. 注意:我预计新数字为2,即使1不再存在。

    我只使用HSQLDB进行了测试。

    问题:这是预期的行为吗?

    来源中的AFAICT,下一个数字应为2 https://github.com/hibernate/hibernate-core/blob/master/hibernate-core/src/main/java/org/hibernate/id/IncrementGenerator.java#L68

    更新:根据Ralph的回答,如果我跳过第4步(不要关闭服务器),它会正确递增。这是因为该值在启动时设置为max(id),然后存储在内存中。

1 个答案:

答案 0 :(得分:3)

IncrementGenerator初始化为"select max(" + column + ") from " + buf.toString();,其中column是ID列。

这意味着每次创建新的IncrementGenerator时(更精确:在调用generate后第一次调用configure)id计数器将“重置”到DB的最大值