У меня есть объект класса А в 2 способе отношений с объектами классов В, С и D.Prefetchs с Cayenne
Так что я мог сделать (с «а» объектом типа A):
B b = a.getB();
A a1 = a.getB().getA(); // and a1 would be equal to a
Когда я сделать SelectQuery на а со prefetchs на отношения от а до B, C и D, все нормально. Но если я добавлю предварительную выборку из отношения от B к A, то A потеряет отношения от A до C и D или ничего не делает. Я имею в виду «потерять», что они были признаны недействительными.
Это нормально? Почему это так?
Примечания: Я использую Cayenne 3.0.2 и непересекающуюся семантику prefetchs.
Пример 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, но они не равны нулю.
благодаря
Не могли бы вы отобразить последовательность запросов, которые приводят к этой проблеме? Также я бы рекомендовал проверить его с помощью Cayenne 3.1, который сейчас находится на грани окончательной версии. –
@andrus_a Я только что проверил cayenne 3.1RC1. Это точно так же. Я добавил два примера к моему вопросу, чтобы сделать его более ясным. – Adrien
То же самое с 3.2M1 – Adrien