休眠JSON转换器的奇怪行为

时间:2019-07-06 13:44:02

标签: java json hibernate

我在将一组POJO转换为JSON字符串时遇到了一些麻烦,因此我可以将其存储在数据库列中。到JSON的转换按预期工作,但是从JSON到Set 的转换发生时,它总是返回LinkedHashSet<LinkedHashMap>,这会引起问题。

奇怪的是,在我的转换器内部,JSON字符串已成功转换为Set<Qualification>。当我在IDE中调试并逐步执行时,可以看到它在deepCopy抽象类中调用了MutableMutabilityPlan方法之后。此时,数据的类型为LinkedHashSet<LinkedHashMap>,而不是转换后的Set<Qualification>

这是我的转换器。

public class SetToStringConverter implements AttributeConverter<Set<Qualification>, String> {

private final ObjectMapper mapper = new ObjectMapper();
private final String errorMessage = "converter.invalid";

@Override
public String convertToDatabaseColumn(final Set<Qualification> items) {
    try {
        return mapper.writeValueAsString(items);
    } catch (JsonProcessingException e) {
        throw new ConverterFailureException(errorMessage);
    }
}

@Override
public Set<Qualification> convertToEntityAttribute(final String data) {
    try {
        if (data != null) {
            final Set<Qualification> s = mapper.readValue(data, new TypeReference<Set<Qualification>>() {});
            return s; // Debugging here I have the correct type
        }

        return new HashSet<>();
    } catch (IOException e) {
        throw new ConverterFailureException(errorMessage);
    }
}

}

我已经做过一些研究并且尝试了各种方法,但是结果总是相同的。

任何人之前都遇到过此问题,或者可以看到我的转换器有任何问题。让我知道是否有任何不清楚的地方,以便我提供更多信息。

非常感谢您的帮助。

0 个答案:

没有答案