KODO: как настроить план получения двунаправленных отношений? - PullRequest
0 голосов
/ 15 апреля 2010

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

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

Если мы создадим план выборки, чтобы получить список Классных комнат и их соответствующих учеников, настроив следующий план выборки:

fetchPlan.addField (Classroom.class,»_ студентов»);

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

Однако, если мы включим ссылку на класс в нашем плане выборки, чтобы поле _classroom заполнилось с помощью fetchPlan.addField (Student.class, «_classroom»), это приведет к дополнительному числу X запросы, где X - количество учеников в каждом классе.

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

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

Примечание-- EAGER_FETCH.PARALLEL включен, и я пробовал это с включенным и выключенным кэшированием (кеш запросов и данных), и в результирующих запросах нет различий.

1 Ответ

0 голосов
/ 23 апреля 2010

Работал с поддержкой Oracle над этим - это дефект в Kodo 4.2 (последняя версия). Исправление состоит в том, чтобы вынуть атрибут default-fetch-group ПОЛНОСТЬЮ (не устанавливайте его в true или false) из файла метаданных jdo для полей, которые находятся на одной стороне двусторонней связи. Таким образом, в приведенном выше примере вы бы удалили атрибут default-fetch-group для поля Student._classroom.

...