Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA使用空格检索枚举_Java_Jpa_Enums - Fatal编程技术网

Java JPA使用空格检索枚举

Java JPA使用空格检索枚举,java,jpa,enums,Java,Jpa,Enums,我有一个spring引导应用程序,并且定义了一些POJO类来指定数据模型。在表中,我想存储枚举列,但我有一个枚举数据类型,并且一些枚举包含空格 enum DataEnum { Workload("Workload"), ReleaseContent("Release content"), "VerificationProc"("Verification proc") private String name = ""; DataEnum (final String

我有一个spring引导应用程序,并且定义了一些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:未知名称值[Release] 枚举类[data.util.DataEnum]的内容]


JPA无法将您的字符串映射到枚举,因为它找不到任何具有该名称的枚举

在内部,@Enumerated使用方法
Enum.valueOf
将DB字符串转换为Enum常量。DB字符串必须与枚举常量标识符完全相同

也就是说,如果要存储
DataEnum.ReleaseContent
,则必须将其存储为
ReleaseContent
而不是
ReleaseContent

在您的情况下,如果要存储与枚举标识符不同的值,可以声明自定义转换器:

@Converter
public class DataEnumConverter implements AttributeConverter<DataEnum, String> {
    @Override
    public String convertToDatabaseColumn(DataEnum enum) {
       // Convert your enum to DB value
    }

    @Override
    public DataEnum convertToEntityAttribute(String dbValue) {

       // Convert String to your enum
    }
}

JPA无法将您的字符串映射到枚举,因为它找不到任何具有该名称的枚举

在内部,@Enumerated使用方法
Enum.valueOf
将DB字符串转换为Enum常量。DB字符串必须与枚举常量标识符完全相同

也就是说,如果要存储
DataEnum.ReleaseContent
,则必须将其存储为
ReleaseContent
而不是
ReleaseContent

在您的情况下,如果要存储与枚举标识符不同的值,可以声明自定义转换器:

@Converter
public class DataEnumConverter implements AttributeConverter<DataEnum, String> {
    @Override
    public String convertToDatabaseColumn(DataEnum enum) {
       // Convert your enum to DB value
    }

    @Override
    public DataEnum convertToEntityAttribute(String dbValue) {

       // Convert String to your enum
    }
}

什么是“包含空间的枚举”。Show code因此,您试图通过名称值而不是枚举的字符串值(即ReleaseContent)获取枚举?不要使用toString()来显示名称。制作一个getName()方法或其他东西。@VeselinDavidov为什么?
java.lang.Enum
的Javadoc声明“当存在更“程序员友好”的字符串形式时,枚举类型应覆盖此方法。”。您不能依赖枚举上的
toString()
来返回常量名称-为此,还有最后一个方法
enum.name()
Hmm它可以是调用getName()而不是name()的ORM吗?什么是“枚举包含空间”。Show code因此,您试图通过名称值而不是枚举的字符串值(即ReleaseContent)获取枚举?不要使用toString()来显示名称。制作一个getName()方法或其他东西。@VeselinDavidov为什么?
java.lang.Enum
的Javadoc声明“当存在更“程序员友好”的字符串形式时,枚举类型应覆盖此方法。”。您不能依赖枚举上的
toString()
来返回常量名称-为此,还有最后一个方法
enum.name()
Hmm它是调用getName()而不是name()的ORM吗?还是只在数据库中存储枚举常量而不是它们的名称;)您甚至不确定名称是否唯一,常量是否唯一。您是否看到OP:
ReleaseContent(“ReleaseContent”),
的当前数据结构?友好名称与枚举标识符不匹配。很多时候,您希望保存一个与枚举标识符不同的名称。程序员的工作就是为enum提供这样一个唯一的名称。我看到了数据结构,但如果他使用@Enumerated(EnumType.STRING),进入数据库的值将是ReleaseContent->enum常量。问题的出现是因为在数据库中,他有另一个值“Release Content”,我尝试了converter方法,但得到的结果是:无法写入JSON文档:无法从ResultSet读取实体状态:。。嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法从结果中读取实体状态为什么它与JSON相关?你在做什么?是否尝试将实体返回到浏览器?给我完整的stacktrace文件,或者只在数据库中存储枚举常量,而不是它们的名称;)您甚至不确定名称是否唯一,常量是否唯一。您是否看到OP:
ReleaseContent(“ReleaseContent”),
的当前数据结构?友好名称与枚举标识符不匹配。很多时候,您希望保存一个与枚举标识符不同的名称。程序员的工作就是为enum提供这样一个唯一的名称。我看到了数据结构,但如果他使用@Enumerated(EnumType.STRING),进入数据库的值将是ReleaseContent->enum常量。问题的出现是因为在数据库中,他有另一个值“Release Content”,我尝试了converter方法,但得到的结果是:无法写入JSON文档:无法从ResultSet读取实体状态:。。嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法从结果中读取实体状态为什么它与JSON相关?你在做什么?是否尝试将实体返回到浏览器?给我发完整的stacktrace,伙计