考虑以下三个类:
以下代码将创建一个EntityTransformer和一个Wrapper,将两个实体添加到Wrapper,对其进行序列化,对其进行反序列化并测试两个权限的存在:
public static void main(String[] args)
throws Exception {
EntityTransformer et = new EntityTransformer();
Wrapper wr = new Wrapper(et);
Entity a1 = wr.addEntity("a1"); // a1 and a2 are created internally by the Wrapper
Entity a2 = wr.addEntity("a2");
byte[] bs = object2Bytes(wr);
wr = (SomeWrapper) bytes2Object(bs);
System.out.println(wr.et.map);
System.out.println(wr.et.map.containsKey(a1));
System.out.println(wr.et.map.containsKey(a2));
}
Run Code Online (Sandbox Code Playgroud)
输出是:
{a1 = whatever-a1,a2 = whatever-a2}
假
真正
所以基本上,序列化以某种方式失败,因为映射应该包含两个实体作为键.我怀疑Entity和EntityTransformer之间存在循环依赖关系,事实上如果我将Entity的EntityManager实例变量设为静态,它就可以工作.
问题1:鉴于我坚持这种循环依赖,我怎么能克服这个问题?
另一个非常奇怪的事情:如果我删除地图维护包装器中的标识符和实体之间的关联,一切正常......?
问题2 …