Один к одному или многие к одному с CF9 ORM в 2 запросах - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть два объекта

HomeFeatures
<cfcomponent persistent="true">
    <cfproperty name="id" column="homeFeatureid">
    <cfproperty name="tabTitle">
    <cfproperty name="title">
    <cfproperty name="description">
    <cfproperty name="sort">
    <cfproperty name="moretext">
    <cfproperty name="url">
    <cfproperty name="active">
    <cfproperty name="media" fieldtype="many-to-one" fkcolumn="mediaid" cfc="media" lazy="false" fetch="join" missingrowIgnored="true">
</cfcomponent>

И

Media
<cfcomponent persistent="true" table="cms.dbo.media">
    <cfproperty name="id" column="mediaid">
    <cfproperty name="filename">
</cfcomponent>

Таким образом, у меня есть несколько homeFeatures, с каждым из которых связан медиа-элемент.Один и тот же медиа-элемент может быть связан с несколькими homeFeatures, но каждый homeFeature может иметь только один медиа-элемент, к которому присоединяется homeFeatures.mediaid.

Если я делаю entityLoad ("homeFeatures"), я получаю 1 запрос для homeFeatures1 запрос таблицы мультимедиа для КАЖДОГО РЯДА В homeFeatures.Другими словами, это проблема N + 1.Зачем?Всего должно быть два запроса: один для получения всех homeFeatures, а второй - для всех медиа, чей медиа-идентификатор находится в списке, определенном homeFeatures.Я пытаюсь выполнить «энергичную» загрузку, как определено в http://www.rupeshk.org/blog/index.php/2009/09/coldfusion-orm-performance-tuning-fetching-strategy/ и в документах Adobe.

В этом конкретном представлении мне нужен доступ к записи мультимедиа для каждой записи, поэтому яленивый установить в ложь.Клянусь, я пробовал каждую итерацию lazy = false | true, batch = 999, fieldtype = один-к-одному | многие-к-одному, fetch = join | select, и все они приводят к одной и той же проблеме N + 1.

Есть идеи?Пожалуйста, помогите!

1 Ответ

0 голосов
/ 02 ноября 2012

В этом случае решение batchsize.Указывая на cfc или на cfproperty, мы можем установить размер пакета так, чтобы связанные элементы группировались, а не по отдельности.

...