我正在使用 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/