【问题标题】:Hibernate increases DB sequence by 50000Hibernate 将 DB 序列增加 50000
【发布时间】:2021-12-05 13:04:31
【问题描述】:

原来 Hibernate 插入了 ID 从 50 开始的新值。但重新部署后,新 ID 为 50050、50051 等。

为什么会这样?如何将其配置为始终递增 1?

数据库是甲骨文。

序列的 SQL:

create sequence my_seq increment by 1 cache 1000;

列设置:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGeneratorMySeq")
@SequenceGenerator(name = "seqGeneratorMySeq", sequenceName = "MY_SEQ")
private Long id;

【问题讨论】:

  • 你应该检查数据库中序列的curval。我认为这里的休眠无关。如果您正在重新部署,您是从头开始重新创建序列吗?
  • 如果您缓存 1000 并重新启动,您可能无法将下一个序列设为 +1。不能保证下一个序列将是前一个序列的 +1。您可以将缓存设置为 1,但这并不高效。
  • 检查hibernate.id.new_generator_mappings的设置是否为true。另见herecache 大小的评论
  • @MarmiteBomber 但我认为当第一个值为真时我遇到了问题。我猜 Hibernate 试图在数据库中找到它自己的序列,而不是我的序列。

标签: java oracle hibernate


【解决方案1】:

找到答案here 简而言之:在实体类中设置序列参数(如增量、缓存大小等),而不仅仅是在数据库中

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 2015-01-24
    • 2012-09-13
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多