【问题标题】:PostgreSQL not doing autoincrementPostgreSQL 不做自动增量
【发布时间】:2020-12-08 12:26:35
【问题描述】:

我正在使用带有 springboot 的 postgresql。因此,每当我使用 post 方法在表中添加新细节而不是自动递增 id 时,它都会从 1 变为 3。它采用替代值而不是连续值。我给出了以下属性,然后创建了表: spring.jpa.hibernate.ddl-auto=创建 没有手动创建表。这个错误的原因是什么?这是我的实体类。

@Entity
@Table(name = "NORTHBOUND_SUBSCRIPTION")
public class NBSubscription {

@Id
@GeneratedValue
@Column(name = "nb_id")
private Long nbId;

@Column(name = "DEVICE_FILTER")
private String deviceFilter;

@Column(name = "INTERFACE_FILTER")
private String interfaceFilter;

@ManyToOne  
@JoinColumn(name="subscriber_id", referencedColumnName="SUBSCRIBER_ID")
private Subscriber subscriber;

@OneToOne
@JoinColumn(name="sensor_group_id", referencedColumnName="ID")
private SensorGroup sensorGroup;

@Column(name = "EVENT_TYPE")
private String eventType;

@Column(name = "SAMPLING_INTERVAL")
private Integer samplingInterval;

@Column(name = "CREATEAT")
@DateTimeFormat(pattern = "dd-MM-yyyy HH:mm")
private Timestamp createAt;

@Column(name = "MODIFIEDAT")
@DateTimeFormat(pattern = "dd-MM-yyyy HH:mm")
private Timestamp modifiedAt;

@Column(name = "CREATEDBY")
private String createdBy;

@Column(name = "MODIFIEDBY")
private String modifiedBy;

@Column(name = "mark_deletion")
private String markDeletion;


public NBSubscription() {
    super();
}
    
public NBSubscription(Subscriber subscriber, SensorGroup sensorGroup) {
    super();        
    this.subscriber = subscriber;
    this.sensorGroup = sensorGroup;
}



public Long getNbId() {
    return nbId;
}

public void setNbId(Long nbId) {
    this.nbId = nbId;
}

public String getDeviceFilter() {
    return deviceFilter;
}
public void setDeviceFilter(String deviceFilter) {
    this.deviceFilter = deviceFilter;
}
public String getInterfaceFilter() {
    return interfaceFilter;
}
public void setInterfaceFilter(String interfaceFilter) {
    this.interfaceFilter = interfaceFilter;
}

@JsonIgnore
public Subscriber getSubscriber() {
    return subscriber;
}
public void setSubscriber(Subscriber subscriber) {
    this.subscriber = subscriber;
}
public SensorGroup getSensorGroup() {
    return sensorGroup;
}
public void setSensorGroup(SensorGroup sensorGroup) {
    this.sensorGroup = sensorGroup;
}
public Integer getSamplingInterval() {
    return samplingInterval;
}
public void setSamplingInterval(Integer samplingInterval) {
    this.samplingInterval = samplingInterval;
}

public String getEventType() {
    return eventType;
}

public void setEventType(String eventType) {
    this.eventType = eventType;
}


    public Timestamp getCreateAt() {
    return createAt;
}

public void setCreateAt(Timestamp createAt) {
    this.createAt = createAt;
}

public Timestamp getModifiedAt() {
    return modifiedAt;
}

public void setModifiedAt(Timestamp modifiedAt) {
    this.modifiedAt = modifiedAt;
}

public String getMarkDeletion() {
    return markDeletion;
}

public void setMarkDeletion(String markDeletion) {
    this.markDeletion = markDeletion;
}

public String getCreatedBy() {
    return createdBy;
}

public void setCreatedBy(String createdBy) {
    this.createdBy = createdBy;
}

public String getModifiedBy() {
    return modifiedBy;
}

public void setModifiedBy(String modifiedBy) {
    this.modifiedBy = modifiedBy;
}

【问题讨论】:

  • 我们无法提供帮助,因为您没有提供如何配置自动增量的相关代码,例如。通过注释在实体级别上。您查阅过哪些 SO 问题、文档、博客、教程、书籍?
  • 所以它正在做自动增量。它只是没有像你想象的那样增加。你把事情称为错误,它工作得很好。
  • 我希望 id 像 1,2,3,4,5,.... 一样递增,但它会像 1,3,5,7 一样递增...有什么办法可以我可以连续增加它吗?
  • 如果所有实体都使用相同的序列进行自动增量,您的 id 将分布在各个实体中,这是怎么回事?
  • 可能是因为在某些表中我得到的序列为 1、3、5、7,而在另一个表中的序列为 2、4、6、8。如果是这个原因,你能告诉我我该怎么办吗?

标签: java postgresql spring-boot


【解决方案1】:

试试这个

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

如果不起作用,请尝试使用表格序列

@Id
@GeneratedValue(strategy=SEQUENCE, generator="CUST_SEQ")
   

【讨论】:

    【解决方案2】:

    您的自动增量是通过序列实现的,默认情况下,实体共享相同的序列,因此自动增量值会分布在各个实体中。

    您可以为每个实体分配其自己的序列。但请注意序列不参与交易。这意味着如果您有回滚,编号将中断。偶尔的差距是不可避免的。

    如果您要让用户看到此序列并且他们希望编号是连续的,我的建议是不要为此使用序列,并将用户可见的计数器保留在与 id 分开的字段中。如果它对用户可见,那么在某些时候它需要更改,并且您无法更改 id。

    【讨论】:

    • 感谢 Nathan,但它通过使用 generationtype.identity 来工作
    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2013-03-04
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多