Kodo: Как настроить Place Plan для двунаправленных отношений?

StackOverflow https://stackoverflow.com/questions/2641239

  •  27-09-2019
  •  | 
  •  

Вопрос

Запуск Kodo 4.2 и имея проблему неэффективных запросов, генерируемых Kodo. Это происходит при выходе на объект, который содержит коллекцию, в которой эта коллекция имеет билеты обратно к первому объекту.

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

Если мы создадим Fetch Plan для получения списка классных комнат и их соответствующих студентов, создавая следующий план Fetch:

fetchplan.adddfield (классная комната .Class, "_ студенты");

Это приведет к двум запросам (получить классные комнаты, а затем заставить всех студентов, которые находятся в этих классах), что мы ожидали.

Однако, если мы включаем ссылку обратно в классную комнату в нашем плане Fetch, в целях наследуемого поля _ClassLOASS, чтобы наследить, делая FetchPlan.adddfield (Student.class, «_Classroom»), это приведет к X количеству дополнительных запросов, где X это количество студентов в каждом классе.

Может кто-нибудь объяснить, как это исправить? Kodo уже имеет оригинальные классные объекты в том, что он выполняет запросы для извлечения объектов классных комнат и установить их в полном поле каждого студента. Поэтому я ожидаю, что Kodo просто установит эти объекты в поле _Classroom на каждом объекте студента соответственно и не вернуться в базу данных.

Еще раз, документация очень не хватает, но от того, что я прочитал, что он сможет сделать это более эффективно.

ПРИМЕЧАНИЕ - EAGER_FETCH.PARALLEL включен, и я пробовал это с кэшированием (запросы и кэширование данных) включено и выключено, и в результирующих запросах нет разницы.

Это было полезно?

Решение

Работал с поддержкой Oracle на этом - это дефект в Kodo 4.2 (последняя версия). Fix - это полностью выбрать атрибут GUST-GROUP-GROUP (не просто устанавливать его в True или false) из файла метаданных JDO для полей, которые находятся на одной-одной стороне двунаправленных отношений. Таким образом, в приведенном выше примере вы вынесли атрибут Guard-Group Default-Gress для поле Student._Classroom.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top