我在Enum中拥有财产:

@Basic
@Column(name = "payment_status", columnDefinition = "varchar(32) default 'ENTERED'", nullable = false)
@Enumerated(EnumType.STRING)
private PaymentStatus paymentStatus;

我想从枚举中获取字段的默认值

我有错误:
org.hibernate.PropertyValueException: not-null property references a null or transient value

该字段不能为空

错误是当我想创建一个对象并保存在数据库中而不输入此字段时(PaymentStatus)

编辑:
@Basic
@ColumnDefault(value = "ENTERED")
@Column(name = "payment_status", nullable = false)
@Enumerated(EnumType.STRING)
private PaymentStatus paymentStatus = PaymentStatus.ENTERED;

为什么不起作用?

最佳答案

default 'ENTERED'告诉数据库,如果'ENTERED'语句中未包含该列,则使用值INSERT。由于该列在类中,因此JPA始终将其包括在INSERT语句中。

要使JPA填写默认值,只需为它分配一个初始化程序,使其具有该值,直到被您替换(调用setter方法)或从数据库替换(从那里读取时)为止。

private PaymentStatus paymentStatus = PaymentStatus.ENTERED;

09-25 20:26