我正在从 3 迁移到 hibernate 5。我发现序列生成器在 Hibernate 5 中无法正常工作。我用最小值 1000 定义了序列并递增 1。但是当我尝试创建新的实体记录时,我看到插入的记录的 id 为 951。看起来 id 与实际序列的下一个值减去 50。在我的例子中,ID 应该是 1000。
请告诉我任何帮助。
这是我的实体和序列:
Entity:
@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) 密钥生成无需与数据库通信,只需加 1 即可完成。
因此,如果您使用默认的allocationSize
也就是 50,有两个结果:
该序列必须具有INCREMENT BY
设置为相同的值allocationSize
要将序列与数据库中的现有密钥对齐,请设置START WITH
to
max(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
Note此行为要求属性 hibernate.id.new_generator_mappings 为 true 作为推荐的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)