gpt4 book ai didi

oracle - Hibernate 5 序列生成问题

转载 作者:行者123 更新时间:2023-12-04 23:42:14 24 4
gpt4 key购买 nike

我正在从 3 迁移到 hibernate 5。我看到序列生成器在 Hibernate 5 中无法正常工作。我将序列定义为最小值 1000 并递增 1。但是当我尝试创建新的实体记录时,我看到插入了 id 为 951 的记录。看起来 id 是从实际序列下一个值减去 50。在我的情况下,ID 应该是 1000。

请让我知道任何帮助。

这是我的实体和序列:

实体:

@Entity
@Table(name = "SOME TABLE")
public class Group {

@Id
@Column(name = "id")
@SequenceGenerator(name = "name", sequenceName ="SEQ_name" )
@GeneratedValue(strategy = GenerationType.AUTO, generator="name")
private Long id;

@Pattern(regexp = "^[^\\*]*$", message = "{3011}")
@Size(message = "{3014}")
@NotBlank(message = "{3000}")
@Column(name = NAME, unique = true, nullable = false)
private String name;

序列:
CREATE SEQUENCE  SEQ_name MINVALUE 1000 NOMAXVALUE INCREMENT BY 1 CACHE 20 NOORDER NOCYCLE;

最佳答案

休眠调用 SEQ_name.nextval但如果 allocationSize大于 1,它会减少 allocationSize 并增加 1。
下一个 (allocationSize-1) key 生成无需与数据库通信即可完成,只需增加 1。
因此,如果您使用默认值 allocationSize即 50,有两个结果:
该序列必须具有 INCREMENT BY设置为与 allocationSize 相同的值
要将序列与数据库中的现有键对齐,请设置 START WITH
最大(ID) + 分配大小
这里有一个小例子

-- START WITH = max(ID) + allocation size 
-- INCREMENT BY = allocation size
-- e.g. if 100 is the last key,
-- to start with a key 101 - set START WITH to 150
CREATE SEQUENCE hib_seq START WITH 150 INCREMENT BY 50;



select hib_seq.nextval - 50 + 1 from dual;
101
-- 49 times Hibernate performs increase by 1 - keys 102 to 150
-- new sequence generation
select hib_seq.nextval - 50 + 1 from dual;
151
备注 此行为要求属性 hibernate.id.new_generator_mappings 为 true,如 recomended

关于oracle - Hibernate 5 序列生成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34044928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com