gpt4 book ai didi

java - JPA 检索带有空格的枚举

转载 作者:行者123 更新时间:2023-12-01 17:50:55 24 4
gpt4 key购买 nike

我有一个 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: Unknown name value [Release content] for enum class [data.util.DataEnum]

最佳答案

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

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

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

就您而言,如果您想存储与枚举标识符不同的值,您可以声明一个自定义转换器:

@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
}
}

您可以看到My Answer例如如何将字符串转换为枚举

在您的实体中:

@Column
@Convert(converter = DataEnumConverter.class)
private DataEnum sheet;

关于java - JPA 检索带有空格的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50286350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com