gpt4 book ai didi

java - 反序列化 Java 对象时引用现有数据?

转载 作者:行者123 更新时间:2023-11-29 03:30:01 26 4
gpt4 key购买 nike

我的对象图由 Hibernate 实体组成。现在大多数对象不存在于新数据库中。但是有些人这样做。所以我的对象是这样的:

Class MyObject{ 
Set<B> bset;
Set<C> cset;
}

bset中的项需要在反序列化后实例化并持久化。但是,cset 中的项目已经存在于新数据库中,因此我不想创建新实例。告诉 Jackson 我知道如何找到这些引用资料的最佳方式是什么?现在我正在考虑为 cset 使用自定义序列化器/反序列化器,它将通过创建一个具有数据库 ID 的对象来序列化它,然后通过从数据库中提取适当的对象来反序列化它。

这有点复杂,我希望有一个更简单的解决方案。有什么建议么?

最佳答案

想通了。我需要三样东西:

  1. JsonCreator 获取 entityManager 和返回对象的 id

    @JsonCreator
    @IgnoredMethod
    public static UiElement findById(@JacksonInject EntityManager entityManager, @JsonProperty("id") int id) {
    return entityManager.find(UiElement.class, id);
    }
  2. 一个 JsonValue getter 返回一个只有 id 的对象

    @JsonValue
    @Transient
    public Map<String,Integer> getJsonObject(){
    HashMap<String,Integer> map = new HashMap<String,Integer>();
    map.put("id", getId());
    return map;
    }
  3. 实体管理器需要注入(inject)到ObjectMapper

    //entitymanager for creating any static data based entities
    InjectableValues injects = new InjectableValues.Std().addValue(EntityManager.class, entityManager);
    mapper.setInjectableValues(injects);

关于java - 反序列化 Java 对象时引用现有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18753323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com