无法延迟初始化集合,无法初始化代理以将 JSON 转换为实体



我有一个使用hibernate和spring框架的java项目。我应该将我的实体转换为 json 并将实体保存到数据库,然后读取 json 并将其转换为我的实体。此外,我的主要实体有一些懒惰加载的实体。我使用以下代码将我的实体转换为 json,我在下面的链接中使用了该代码。

避免对未提取的惰性对象进行杰克逊序列化

String arg = "";
ObjectMapper mapper = new ObjectMapper();
Hibernate4Module module = new Hibernate4Module();
mapper.registerModule(module);
mapper.enableDefaultTyping();
try {
arg = mapper.writeValueAsString(arguments);
} catch (IOException e) {
logger.error("Uncaught exception in thread: " + ExceptionUtils.getStringFromExceptionStackTrace(e));
}

但是,从 JSON 读取到实体可能不起作用。

ObjectMapper mapper = new ObjectMapper();
Hibernate4Module module = new Hibernate4Module();
mapper.registerModule(module);
module.disable(Hibernate4Module.Feature.FORCE_LAZY_LOADING);
module.enable(Hibernate4Module.Feature.SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS);
mapper.enableDefaultTyping();
return mapper.readValue(jsonObject,Object[].class);

我得到了以下异常:

com.fasterxml.jackson.databind.JsonMappingException: failed to lazily 初始化集合,无法初始化代理 - 无会话 (通过参考链: Object[][0]->com.rayan.banking.privatebanking.model.entity.Contract["financialAgreementList"]->java.util.ArrayList[0]->com.rayan.banking.privatebanking.model.entity.FinancialAgreement["financialAgreementService"]( at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:210( at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:177( at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1474( at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:260( at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125( at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245( at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217( at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25( at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:110( at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromArray(AsArrayTypeDeserializer.java:50( at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserializeWithType(CollectionDeserializer.java:278( at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:518( at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95( at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:258( at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125( at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:110( at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromAny(AsArrayTypeDeserializer.java:68( at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:550( at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:158( at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:17( at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736( at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2726(

Contract.financialAgreementList属性上添加@JsonIgnore,以便可以禁用 JSON 序列化和反序列化。

最新更新