我正在使用 spring data JPA 的序列生成器将主键分配给实体。
模型包含:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_post")
@SequenceGenerator(name = "seq_post", allocationSize = 5)
private Long id;
对应的序列定义(对于SQL Server DB):
CREATE SEQUENCE dbo.seq_post START WITH 1 INCREMENT BY 5;
因为我想从 100 而不是 1 开始 ids,所以我将 sql 脚本更新为
CREATE SEQUENCE dbo.seq_post START WITH 100 INCREMENT BY 5;
然后我遇到了上面提到的问题here https://stackoverflow.com/questions/34044928/hibernate-5-sequence-generate-issue/34047121。我通过那里提到的解决方案修复了它。
这让我想知道,当我希望数据库序列从1开始时,为什么这个问题不会发生?根据提到的答案here https://stackoverflow.com/a/34047121/13866126我希望 ids 不会从 1 开始,但这并没有发生。为什么会这样?
首先检查您是否设置了属性hibernate.id.new_generator_mappings
to true
as 推荐的 http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-identifier
比你在调整 the allocationSize
与序列INCREMENT BY
.
如果你想start the ID
对于特定值,它似乎遵循以下规则:
例如首先5000
使用默认的allocationSize
of 50
定义序列如下
create sequence sub_seq
START WITH 5050
INCREMENT BY 50
NOCACHE;
请注意,我正在使用NOCACHE
选项,因为我认为 Hibernate 是唯一用户这个序列,所以caching并没有真正的意义(实际上replaced与分配大小。
你也loose会话之间大约。的 1/2allocationSize
of the ID
并且您不希望增加它而导致缓存的额外损失ID
s.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)