使用GenerationType.SEQUENCE生成负Id值

问题描述 投票:0回答:1

为什么我总是得到实体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();
java postgresql jpa entity sequences
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.