gpt4 book ai didi

java - Apache 点燃: Lazy References

转载 作者:行者123 更新时间:2023-12-02 10:31:56 25 4
gpt4 key购买 nike

不知道如何正确表述标题,但这就是问题所在。

假设我有一个类 Person 和一个类 Organization ,它们的关联类型是多对一。在Java代码中,Person对象具有对Organization对象的引用,并且Organization具有Person<的Collection/ 对象。 PersonOrganization 对象都是可序列化。除此之外,我还对 Person 进行了编程,使其与 Organization 具有亲和性。

如果我将 Person 对象的实例放入缓存(网格节点)中,我只想序列化关联的 Organization 的标识符,而不是正在引用的整个对象。
是否有任何开箱即用的解决方案(某种代理)可以跳过关联对象的序列化,并通过 Person 的反序列化实例上的标识符延迟加载关联对象?

我已经看到过基于装饰器的 Oracle Coherence 网格的自定义解决方案,但实现极其复杂。

最佳答案

存储组织的 ID 而不是整个 Organization 对象怎么样?这是将人员与其组织进行搭配的正确方法。

如果您需要在 Person 实例中存储实际的 Organization 对象,您可以创建一个 transient 字段并延迟更新它,当您访问它时。像这样的事情:

class Person {
@AffinityKeyMapped
private int orgId;

private transient Organization org;

// Other fields, constructors, getter, setters.
}

// ...

// Accessor method in DAO logic.
Organization getOrganization(Person person, IgniteCache<Integer, Organization> orgCache) {
Organization org = person.getOrganization();
if (org == null) {
org = orgCache.get(person.getOrganizationId());
person.setOrganization(org);
}

return org;
}

这样,当 Person 放入 Ignite 缓存时,组织字段将不会被序列化。只有 orgId 是。对于 Person 对象,只会从缓存中请求一次 Organization。对 getOrganization() 的后续调用将使用保存的值。

关于java - Apache 点燃: Lazy References,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569643/

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