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

70gysomp  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(150)

我正在使用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实体中。如何更正这种情况?

osh3o9ms

osh3o9ms1#

字段'destination'没有默认值

这表示您的字段目标具有约束为NOT NULL,并且您正在尝试保存实体而不提供 destination 的值。

解决方案
1.允许字段为空值@Column(nullable = true)
2.提供目的地的预设值

4szc88ey

4szc88ey2#

我在网上找到了这个解决方案,它对我很有效
因为我的模型中有许多更改,所以解决方案是删除该表或数据库,并运行应用程序以进行Hibernate,从而创建新的数据库或表

相关问题