JPA:根据枚举验证提取的字段



我有一个这样的实体:


@Entity
@Table(name = "MyTable", schema = "test")
@Getter @Setter
public class PurgeSystemsEntity {
@Id
@Column(name = "id", nullable = false)
private int id;
@Column(name = "system_name", nullable = false, length = 255)
private String systemName;
.
.
}

如何验证在systemName字段中从DB(类似于执行.findAll()时(获得的字符串是否是EnumSystem:中定义的可能选项之一

public static enum System {
PROD, DEV, QA;
}

因此,如果一行的systemName值为"STAGING",它应该立即抛出异常。

有什么优雅的方法吗?

将字段类型设置为枚举。

@Column(name = "system_name", nullable = false, length = 255)
@Enumerated(EnumType.STRING)
private System systemName;

如果遇到枚举中未定义的值,这将导致错误。

您还必须显式设置EnumType.STRING,因为它默认为EnumType.ORDINAL,这将对应于枚举序数值,而不是名称

您可以在ENUM中编写自己的方法

类似的东西

public static MyEnum fromValue(String value) {
for (MyEnum b : MyEnum.values()) {
if (b.value.equals(value)) {
return b;
}
}
throw new IllegalArgumentException("Unexpected value '" + value + "'");
}

或者,如果Enum是类的一部分,我认为Java应该自动处理并在值无法映射的情况下抛出IllegalArgumentException!

最新更新