我以两种方式与 B、C 和 D 类的对象建立了关系。
所以我可以做(用“a”一个A类型的对象):
B b = a.getB();
A a1 = a.getB().getA(); // and a1 would be equal to a
当我对 A 执行 SelectQuery 并预取从 A 到 B、C 和 D 的关系时,一切都很好。但是如果我在从 B 到 A 的关系上添加预取,那么 A 会失去从 A 到 C 和 D 的关系,或者它什么也不做。我的意思是“输掉”它们已经失效。
这正常吗?为什么会这样?
注意:我使用的是 Cayenne 3.0.2 和不相交的预取语义。
示例 1(如上所述):
SelectQuery query = new SelectQuery(A.class);
query.addPrefetch("b").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
query.addPrefetch("c").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
query.addPrefetch("d").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
query.addPrefetch("b.a").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
List<?> res= context.performQuery(query);
示例 2(这可能是相同的问题):
SelectQuery query = new SelectQuery(A.class);
query.addPrefetch("b").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
query.addPrefetch("c").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
List<?> res= context.performQuery(query);
然后稍后
SelectQuery query = new SelectQuery(A.class);
query.addPrefetch("d").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
List<?> res= context.performQuery(query);
然后与 b 和 c 的关系无效或忽略最后一次预取。有时 b 和 c 会设置为 null,尽管它们不为 null。
谢谢