ORM запросы с транзитивной зависимостью - PullRequest
0 голосов
/ 22 февраля 2011

Вот часть схемы моей базы данных: enter image description here

Поэтому я использую таблицы страниц, точки и элементы для создания макета моей страницы.К каждому предмету также привязан itemData.Все мои модели таблиц созданы и их отношения определены.Я могу сгенерировать страницу, просматривая результат следующего запроса:

<cfset variables.page = EntityLoad("Page", {id=arguments.id}, true)>

Теперь проблема возникает, когда я пытаюсь сделать то же самое, но загружает только itemsData из одного "idee"" это идея на французском языке.Я не могу придумать способ сделать это с entityLoad, поэтому я попытался использовать HQL:

<cfset variables.page = ORMExecuteQuery("
    select  p
        from Page p
        left join p.points po
        left join po.items it           
        left join it.itemsData id
        where p.id = :pid and id.idIdee = :iid", {pid=arguments.id, iid=session.user.idee}, true)>

, который кажется близким к нему, но это не так ... Иногда я получаю больше 1 строки и т. Д. И т. Д.

Любой гуру ORM знает, как я мог справиться с этим?

1 Ответ

1 голос
/ 23 февраля 2011

При запросе с NH вы всегда получаете законченные объекты. Это означает, что вы не можете фильтровать идеи itemsData с помощью запроса (вы просто можете найти itemsData по идеям, но эти itemsData всегда будут полными, со всеми прикрепленными идеями).

В NH вы можете использовать фильтр для этого.

Было бы намного проще поддерживать ссылку из idee на itemsData. Затем вы просто загружаете Idee (у вас есть его идентификатор), а затем к нему прикрепляется ItemData.

class Idee
{
  IList<ItemsData> ItemsData { get; private set; }
}

Вам просто нужно отобразить его как обратную сумку.

...