我正在使用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实体中。如何更正这种情况?
2条答案
按热度按时间osh3o9ms1#
字段'destination'没有默认值
这表示您的字段目标具有约束为NOT NULL,并且您正在尝试保存实体而不提供 destination 的值。
解决方案
1.允许字段为空值
@Column(nullable = true)
2.提供目的地的预设值
4szc88ey2#
我在网上找到了这个解决方案,它对我很有效
因为我的模型中有许多更改,所以解决方案是删除该表或数据库,并运行应用程序以进行Hibernate,从而创建新的数据库或表