Apache Cayenne — настройка пакетной связи

Мне интересно, есть ли способ с Apache Cayenne использовать их метод .setTo для установки отношений, не вытягивая объект по одному при каждом вызове метода. Я работаю с несколькими тысячами строк данных, и мне приходится запрашивать объект каждый раз, когда устанавливается связь, что занимает несколько миллисекунд, что в сумме составляет несколько минут с таким большим набором данных.

Я пытался копаться в их документации, но некоторые из них абстрагированы, что затрудняет поиск именно того, что я ищу. Был бы признателен за любые советы!


person Tim Hunter    schedule 24.10.2018    source источник
comment
Я просто немного поработал, проверив, добавляются или изменяются ли новые данные перед вызовом методов setTo. Это работает для моих целей.   -  person Tim Hunter    schedule 24.10.2018


Ответы (1)


Идиоматическим решением является явная предварительная выборка всех взаимосвязей, когда вы запустите запрос, который даст вам исходный список объектов, если вы ожидаете доступа к этим отношениям для значительного процента объектов списка:

List<Artist> objects = ObjectSelect.query(Artist.class)
    .prefetch(Artist.PAINTINGS.joint())
    .select(context);
person andrus_a    schedule 25.10.2018
comment
Спасибо за комментарий! Хм... не уверен, что это именно то, что я ищу. У меня уже есть объекты, для которых я устанавливаю отношения, хранящиеся в хэш-картах, поэтому все объекты должны быть локально. Я просто не уверен, как отключить автоматическое поведение метода .setTo для запроса базы данных при вызове метода, пока я не смогу отправить настройки отношений для всех объектов в виде группы действий. При условии, что такая функциональность вообще возможна. - person Tim Hunter; 27.10.2018
comment
Cayenne не должен запрашивать базу данных, когда вы вызываете setTo*, если эта связь уже разрешена. - person andrus_a; 27.10.2018