为什么我总是得到实体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以解决此问题以生成negetive值。