gpt4 book ai didi

java - 使用 GenerationType.SEQUENCE 生成负 Id 值

转载 作者:行者123 更新时间:2023-11-29 14:16:08 25 4
gpt4 key购买 nike

为什么我总是得到实体 ID 的负值?是否与increment金额值相关?例如当我使用

create sequence message_sequence start 1 increment 1;

我总是得到负值(-38、-44、-45)。但如果我放

create sequence message_sequence start 1 increment 50;

一切都很好 (52, 102)。为什么会有如此奇怪的行为?这是一个实体:

@Entity
@Table(name = "messages")
public class Message {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "message_sequence")
@SequenceGenerator(name = "message_sequence", sequenceName = "message_sequence")
private long id;

private String text;

public void setText(String text) {
this.text = text;
}

public String getText() {
return text;
}
}

程序入口:

EntityManagerFactory emf = JPAUtility.getEntityManagerFactory();

EntityManager entityManager = emf.createEntityManager();

entityManager.getTransaction().begin();

Message m = new Message();
m.setText("Hello World");

etityManager.persist(m);

entityManager.getTransaction().commit();
entityManager.close();

最佳答案

在 SequenceGenerator 注释中有一个名为 allocationSize 的变量。此大小默认为 50。这意味着 Hibernate 将保留 50 个 id,并且不需要为每个插入检索新的 id。设置 allocationSize=1 来解决这个负值生成问题。

关于java - 使用 GenerationType.SEQUENCE 生成负 Id 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693979/

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