首页 > 解决方案 > 在 JPA 上保留枚举列表,转换器不工作

问题描述

我正在尝试使用 JPA 和休眠将枚举列表保留在数据库中。

我的模型看起来像这样:

@Id
@Column
String id;

@Column
@Convert(converter = EnumConverter.class)
List<Enum> listEnum;

我想保留那个enumas列表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三个值中的一个,而不是一个具有一个值的值。当我调试转换器时,它是正确的,所以问题必须在转换之后。

标签: javajpaspring-data-jpa

解决方案


推荐阅读