【发布时间】:2018-05-11 06:35:16
【问题描述】:
我有一个 Spring Boot 应用程序,并且我定义了一些 POJO 类来指定数据模型。在一个表中,我想存储枚举列,但我有一个枚举数据类型,并且一些枚举包含空格。
enum DataEnum {
Workload("Workload"),
ReleaseContent("Release content"),
"VerificationProc"("Verification proc")
private String name = "";
DataEnum (final String name) {
this.name = name;
}
public String getName() {
return name;
}
public DataEnum fromString(String value) {
return DataEnum.valueOf(value);
}
@Override
public String toString() {
return name;
}
}
我有一个 POJO 实体类如下:
@Entity
@IdClass(FieldId.class)
public class Field {
@Id
private String id;
@Id
@Enumerated(EnumType.STRING)
private DataEnum sheet;
...
}
当我尝试从数据库中检索数据时,我得到:
java.lang.IllegalArgumentException: 未知名称值 [发布 枚举类[data.util.DataEnum]的内容]
【问题讨论】:
-
什么是“包含空间的枚举”。显示代码
-
那么,您试图通过名称值而不是枚举的字符串值(即;ReleaseContent)来获取枚举?
-
不要使用 toString() 来显示名称。做一个 getName() 方法什么的。
-
@VeselinDavidov 为什么会这样?
java.lang.Enum的 Javadoc 声明“当存在更“程序员友好”的字符串形式时,枚举类型应覆盖此方法。”。您不能依赖枚举上的toString()来返回常量名称 - 为此,有一个最终方法Enum.name() -
嗯,它可以是调用 getName() 而不是 name() 的 ORM 吗?