MySQL/JPA 字段没有默认值错误,即使该字段位于类层次结构中的不同类中

标签 mysql spring-boot jpa spring-data-jpa

我正在使用 JPA 并具有如下所示的类层次结构。

    @Entity
    public class Stage {
        @Id
        @Column(name="ID")
        @GeneratedValue(generator = "Stage_IDGenerator", strategy = GenerationType.SEQUENCE)
        private long id;

        @Enumerated(EnumType.STRING)
        @Basic(optional=false)
        private StageStatus status;
    }

    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    public class TravelStage extends Stage {
        @Basic(optional=false)
        @Column(nullable = false)
        private String source;

        @Basic(optional=false)
        @Column(nullable = false)
        private String destination;
    }

    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    public class WorkStage extends Stage {
        @Basic(optional=false)
        @Column(nullable = false)
        private String workPlace;
    }

当我使用以下代码创建并尝试保存“WorkStage”实体时

    WorkStage ws = new WorkStage();
    ws.setStatus(StageStatus.OPEN);
    ws.setWorkPlace("POSTCODE");
    workStageRepository.save(ws);

我收到错误

    SQL Error: 1364, SQLState: HY000
    Field 'destination' doesn't have a default value

为什么会发生这种情况?字段目标不在 WorkStage 实体中。我该如何纠正这个问题?

最佳答案

“目的地”字段没有默认值

这表明您的字段目标已约束为 NOT NULL,并且您尝试在不提供目标值的情况下保存实体。目标

解决方案

<强>1。允许字段为空 @Column(nullable = true)
2.为目的地提供默认值

关于MySQL/JPA 字段没有默认值错误,即使该字段位于类层次结构中的不同类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59365618/

相关文章:

java - 为什么 "IGNITE"计算的字段返回 "BIGINT"类型?理论上应该是 "DECIMAL"类型,因为结果包含十进制数字

mysql - 如何将 MS Access 记录从主表和两个链接表导入 Excel?

MySql 服务不会从恢复的 ibdata1 文件启动

java - 使用列表类型覆盖 @ConfigurationProperties 中的 setter

使用 Hibernate/JPA/Spring 进行 Java 延迟加载

php - Laravel 4 无法运行整个 RAW 查询

java - 即使服务器出现错误,ResponseBuilder 也会给出 200 OK HTTP 响应

java - 如何在Spring Boot中从目标文件夹读取java文件

sql - QueryDsl:带有投影 bean 和 oneToMany 或 manyToMany 关联的异常 "argument type mismatch"

java - JPA 从 XML 文件访问常量