这就是我使用生成器的方式:
<id name="id" column="column_name">
<generator class="increment"/>
</id>
private Integer id;
我看到的行为是:
注意:我预计新数字为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),然后存储在内存中。
答案 0 :(得分:3)
IncrementGenerator
初始化为"select max(" + column + ") from " + buf.toString();
,其中column
是ID列。
这意味着每次创建新的IncrementGenerator时(更精确:在调用generate
后第一次调用configure
)id计数器将“重置”到DB的最大值