У меня есть объект класса A двумя способами связи с объектами классов B, C и D.
Итак, я мог бы сделать (с «а» объектом типа А):
B b = a.getB();
A a1 = a.getB().getA(); // and a1 would be equal to a
Когда я делаю SelectQuery для A с предварительной выборкой отношений между 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 устанавливаются равными нулю, хотя они не равны нулю.
Спасибо