ColdFusion: коллекция ORM с несколькими внешними ключами

Структура моей базы данных в основном состоит из нескольких первичных ключей на таблицу, поэтому для соединения требуется несколько столбцов. Я пытаюсь использовать ColdFusion (точнее, 11) коллекцию ORM свойство. Похоже, что список столбцов, разделенных запятыми, в атрибуте fkColumn не работает, как это работает для свойства отношений. Я сообщил об ошибке в Adobe, но мне интересно, else столкнулся с этим и нашел обходные пути. А может я просто не так делаю..

Настройка стола

Years        Staff         StaffSites    Sites
===========  ============  ============  ===========
YearID (PK)  StaffID (PK)  YearID (PK)   SiteID (PK)
YearName     StaffName     StaffID (PK)  SiteName
                           SiteID (PK)

Персонал ORM CFC

component persistent=true table='Staff' {
    property name='id'    column='StaffID'       fieldType='id';
    property name='year'  column='YearID'        fieldType='id';
    property name='sites' elementColumn='SiteID' fieldType='collection' table='StaffSites' fkColumn='StaffID,YearID';
}

Проблема

Ошибка при выполнении сгенерированного запроса: [Macromedia][SQLServer JDBC Driver][SQLServer]An expression of non-boolean type specified in a context where a condition is expected, near ','.

Взглянув на сгенерированный запрос, видно, что список столбцов не анализируется должным образом для предложения where, но он в некоторой степени понимает, что в выражении select есть несколько столбцов.

select
    sites0_.StaffID,
    YearID as StaffID1_2_0_,
    sites0_.SiteID as SiteID4_0_ 
from
    StaffSites sites0_ 
where
    sites0_.StaffID,YearID=?

Цель

Чтобы свойство коллекции ORM правильно поддерживало "объединение" с несколькими ключами. Почему бы не использовать отношения? Я хотел бы использовать объекты ORM, чтобы затем сериализовать их как JSON для использования в службах REST. Сериализованный JSON должен содержать идентификатор отношений, а не фактические данные отношений. Например, полезная нагрузка JSON должна быть:

{
    "id": 1234,
    "year": 2015,
    "sites": [1,2,3]
}

Вместо чего-то вроде:

{
    "id": 1234,
    "year": 2015,
    "sites": [
        {"id": 1, "name": "Foo"},
        {"id": 2, "name": "Bar"},
        {"id": 3, "name": "Baz"},
    ]
}

person Panman    schedule 01.04.2015    source источник
comment
Опубликуйте образец ожидаемого JSON для использования в службах REST.   -  person Henry    schedule 21.04.2015
comment
@ Генри, я добавил примеры, которые вы просили. Спасибо за любой вклад. Я думал об использовании крючков ORM для ручной загрузки данных после загрузки. Я попробую это, как только вернусь к этому проекту.   -  person Panman    schedule 22.04.2015
comment
похоже, вы хотите получить этот JSON от объекта Staff. Используйте пользовательский сериализатор (новый в CF11) для Staff и настройте остальные как «один ко многим» или «многие ко многим» с таблицей ссылок.   -  person Henry    schedule 23.04.2015


Ответы (1)


Для вашей структуры БД самым простым способом перевода в ORM было бы использование «StaffSites» как linktable для отношений «многие ко многим».

Вам следует попробовать пользовательский сериализатор CF11 http://blogs.coldfusion.com/post.cfm/language-enhancements-in-coldfusion-splendor-improved-json-serialization-2

person Henry    schedule 21.04.2015
comment
Проблема с отношениями заключается в том, что фактические данные отношений включаются в сериализованный JSON. Мне просто нужно получить соответствующий идентификатор при сериализации, что является причиной для сбора. - person Panman; 21.04.2015
comment
@Panman, тогда зачем вообще использовать ORM? :) Просто используйте старый добрый cfquery, если вы предпочитаете иметь дело с идентификаторами. - person Henry; 21.04.2015
comment
Я все еще хотел бы использовать другие функции ORM; поиск, кэширование и т. д. И это хороший способ организовать другую бизнес-логику. - person Panman; 21.04.2015
comment
Хорошо, я попробую связь с пользовательским маршрутом сериализатора. У меня возникли проблемы с выяснением того, как настроить свойство. Вы знаете, какой должна быть моя собственность sites? - person Panman; 28.04.2015