【问题标题】:Spring Boot: Entity Field '' doesn't have a default value when persistingSpring Boot:实体字段''在持久化时没有默认值
【发布时间】:2019-07-04 12:21:11
【问题描述】:

下面是我的警报实体类,我正在自动生成 ID。但是在保存时,我收到错误消息,因为 Spring Boot: Entity Field 'u_id' doesn't have a default value。我也尝试了 strategy = SEQUENCE/AUTO,结果相同。

import javax.persistence.*;

@Entity
public class Alert {    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "u_id")
    private long u_id = 1;
    @Embedded
    private Reading reading;

    @Column(insertable = false, updatable = false)
    String vin;

    private String priority;

    public long getU_id() {
        return u_id;
    }

    public void setU_id(long u_id) {
        this.u_id = u_id;
    }

    public String getPriority() {
        return priority;
    }

    public void setPriority(String priority) {
        this.priority = priority;
    }


    public Reading getVehicleReading() {
        return reading;
    }

    public void setVehicleReading(Reading vehicleReading) {
        this.reading = vehicleReading;
        this.vin = vehicleReading.getVin();
    }


}

【问题讨论】:

  • =1 中的private long u_id = 1; 是错字吗?这将使该对象的所有新实例都具有相同的 ID,这可能会导致您想要插入的位置意外更新。
  • 不完全是,它使它将 1 设置为默认值。我现在将代码更改为 @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "u_id", columnDefinition="NUMBER(10) default '1'") private int u_id;现在我得到一个执行 DDL 的错误
  • 不管怎样,这听起来可能是数据库模式的问题。您是使用 Hibernate 生成模式还是手动生成?您可能希望在数据库服务器上检查该列是否设置为自动增量或标识列(取决于您使用的数据库)
  • @aelfric5578 非常感谢!从 4 小时开始就一直在努力解决这个问题。由于某种原因未设置自动增量。我还必须提供另一个注释。 @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(columnDefinition = "serial").

标签: java hibernate spring-boot jpa spring-data-jpa


【解决方案1】:

提供如下的另一个注释解决了它。

@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(columnDefinition = "serial")

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2020-05-19
    相关资源
    最近更新 更多