我的对象图由Hibernate实体组成。现在,新数据库中不存在大多数对象。不过有些人这样做所以我的目标是这样的:
Class MyObject{
Set<B> bset;
Set<C> cset;
}
反序列化后,bset
中的项需要实例化并保留。但是,cset
中的项已经存在于新数据库中,因此我不希望创建新实例。什么是告诉杰克逊的最佳方式我知道如何找到这些参考?现在我正在考虑为cset
使用自定义序列化器/反序列化器,它将通过创建具有数据库ID的对象来序列化它,然后通过从数据库中拉出适当的对象来反序列化它。
这有点复杂,我希望有一个更简单的解决方案。有什么建议?
答案 0 :(得分:4)
想出来。我需要三件事:
获取entityManager的JsonCreator,以及返回对象的id
@JsonCreator
@IgnoredMethod
public static UiElement findById(@JacksonInject EntityManager entityManager, @JsonProperty("id") int id) {
return entityManager.find(UiElement.class, id);
}
JsonValue getter返回只有id
的对象@JsonValue
@Transient
public Map<String,Integer> getJsonObject(){
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("id", getId());
return map;
}
需要将实体管理器注入ObjectMapper
//entitymanager for creating any static data based entities
InjectableValues injects = new InjectableValues.Std().addValue(EntityManager.class, entityManager);
mapper.setInjectableValues(injects);