java - 在 JPA 上保留枚举列表,转换器不工作
问题描述
我正在尝试使用 JPA 和休眠将枚举列表保留在数据库中。
我的模型看起来像这样:
@Id
@Column
String id;
@Column
@Convert(converter = EnumConverter.class)
List<Enum> listEnum;
我想保留那个enum
as列表String
并使用转换器 ( EnumConverter
) 来存储它并从数据库中读取它。
我的转换器使用 Jackson 来序列化和反序列化。例子:
@Converter(autoApply = true)
public class EnumListConverter implements AttributeConverter<List<Enum>, String> {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public String convertToDatabaseColumn(final List<Enum> list) {
try {
return objectMapper.writeValueAsString(list);
} catch (JsonProcessingException e) {
return "";
}
}
@Override
public List<Enum> convertToEntityAttribute(final String list) {
try {
return Arrays.asList(objectMapper.readValue(list, Enum[].class));
} catch (IOException e) {
return new ArrayList<>();
}
}
}
我遇到的问题是它可以很好地存储它,但是当我尝试获取代码时,它会返回一个大小为 1 (类型ArrayList
)的数组,如下所示,而不是大小为 3 的数组:
"["Value1","Value2","Value3"]"
我正在使用CrudRepository
一个简单的本机查询:
SELECT list from the entity;
有人知道我错过了什么吗?我想要ArrayList
三个值中的一个,而不是一个具有一个值的值。当我调试转换器时,它是正确的,所以问题必须在转换之后。
解决方案
推荐阅读
- javascript - 在 Flow 中转换变量
- asp.net-core - 如何在 ASP.NET Core Razor 页面中集成 AMP?
- ios - 堆栈视图中按钮的动态大小取决于文本长度
- arrays - 循环遍历数组数值
- asp.net - 使用实体框架创建具有多个查询的 MVC ViewModel
- node.js - npm install 给出警告,npm audit fix 不起作用
- python - Python新手,我的代码有什么问题?如何让游戏存储金币值,并开始新的迭代直到用户退出?
- python - 如何在特定驱动器的所有子目录中创建文件?
- android - 从一个活动到另一个活动并回到上一个活动后如何保留价值?
- java - Maven:编译时将可执行文件(.exe)移动到目标文件夹中