【问题标题】:Negative Id values generation with GenerationType.SEQUENCE使用 GenerationType.SEQUENCE 生成负 Id 值
【发布时间】:2018-05-21 11:55:01
【问题描述】:

为什么我总是得到一个实体 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();

【问题讨论】:

  • select nextval('message_sequence'); 产生阳性结果。请详细说明 - 我相信没有人能够像上面那样复制它
  • 我已经更新了我的问题
  • 我也有同样的问题。 ...

标签: java postgresql jpa entity sequences


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    allocationSize = 1 代码添加到@SequenceGenerator 后 工作正常!

    【讨论】:

      猜你喜欢
      • 2012-04-09
      • 2017-09-21
      • 2015-12-19
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2012-05-10
      • 1970-01-01
      相关资源
      最近更新 更多