Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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 hibernate JSON转换器的异常行为_Java_Json_Hibernate - Fatal编程技术网

Java hibernate JSON转换器的异常行为

Java hibernate JSON转换器的异常行为,java,json,hibernate,Java,Json,Hibernate,我在将一组POJO转换为JSON字符串以便将其存储在数据库列中时遇到了一些问题。到JSON的转换按预期工作,但是当从JSON到集合的转换发生时,它总是返回一个导致问题的LinkedHashSet 奇怪的是,在我的转换器中,JSON字符串成功地转换为集。当我在IDE中调试并逐步执行时,我可以看到在调用MutableMutabilityPlan抽象类中的deepCopy方法之后。此时,数据类型为LinkedHashSet,而不是转换后的Set 这是我的转换器 public class SetToSt

我在将一组POJO转换为JSON字符串以便将其存储在数据库列中时遇到了一些问题。到JSON的转换按预期工作,但是当从JSON到集合的转换发生时,它总是返回一个导致问题的
LinkedHashSet

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

这是我的转换器

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);
    }
}
公共类SetToStringConverter实现AttributeConverter{
私有最终ObjectMapper mapper=新ObjectMapper();
私有最终字符串errorMessage=“converter.invalid”;
@凌驾
公共字符串convertToDatabaseColumn(最终设置项){
试一试{
返回mapper.writeValueAsString(项);
}捕获(JsonProcessingException e){
抛出新的ConverterFailureException(errorMessage);
}
}
@凌驾
公共集convertToEntityAttribute(最终字符串数据){
试一试{
如果(数据!=null){
最终集s=mapper.readValue(数据,新类型引用(){});
返回s;//在这里调试我有正确的类型
}
返回新的HashSet();
}捕获(IOE异常){
抛出新的ConverterFailureException(errorMessage);
}
}
}

我做了一些研究,尝试了各种方法,但结果总是一样的

以前有没有人遇到过这个问题,或者我的转换器有什么问题。如果有什么不清楚的地方,请告诉我,这样我可以提供更多信息


非常感谢您的帮助。

Set是一个界面。LinkedHashSet是Set接口的一个实现。你到底希望什么取代LinkedHashSet?为什么?作为LinkedHashSet的值有什么问题?谢谢你的评论。我希望得到一套而不是一套。我的描述不清楚。我会更新的。根据你提供的代码,我认为我们不能做任何事情来帮助你。问题在别处。Set是一个接口。LinkedHashSet是Set接口的一个实现。你到底希望什么取代LinkedHashSet?为什么?作为LinkedHashSet的值有什么问题?谢谢你的评论。我希望得到一套而不是一套。我的描述不清楚。我会更新的。根据你提供的代码,我认为我们不能做任何事情来帮助你。问题在别处。