2015-04-01 4 views
6

Моя структура базы данных в основном состоит из нескольких первичных ключей для каждой таблицы, поэтому для каждого соединения требуется несколько столбцов. Я пытаюсь использовать ColdFusion (11 для конкретного) ORM collection property. Кажется, что список столбцов, разделенных запятыми, в атрибуте fkColumn не работает, как и для relationship properties. У меня есть filed a bug with Adobe, но мне интересно, если кто-то еще столкнулся с этим и нашел обходные пути. Или, может быть, я просто делаю это неправильно ..ColdFusion: коллекция ORM с несколькими внешними ключами

Настройка Таблица

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 
    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"}, 
    ] 
} 
+0

сообщения образца ожидаемого JSON для использования в REST услугах. – Henry

+0

@Henry Я добавил примеры, которые вы запросили. Спасибо за любой вклад. Я думал об использовании крючков ORM для ручной загрузки данных «после загрузки». Я попробую, когда вернусь к этому проекту. – Panman

+0

похоже, что вы хотите, чтобы этот JSON был создан из персонажа. Используйте специальный сериализатор (новый в CF11) для «Персонала» и настройте остальных как «один-ко-многим» или «многие-ко-многим» с помощью ссылки. – Henry

ответ

0

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

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

+0

Проблема с отношениями заключается в том, что фактические данные отношений включены в сериализованный JSON. Мне просто нужно получить связанный идентификатор при сериализации, который является аргументом в пользу коллекции. – Panman

+0

@Panman, то зачем использовать ORM? :) Просто используйте добрые старые cfquery, если вы предпочитаете иметь дело с ID. – Henry

+0

Я все еще хотел бы использовать другие функции ORM; поиск, кеширование и т. д. И это хороший способ организовать другую бизнес-логику. – Panman

Смежные вопросы