我在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;