Запуск 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 включен, и я пробовал это с включенным и выключенным кэшированием (кеш запросов и данных), и в результирующих запросах нет различий.