coldfusion fw1 (hibernate) базовое соединение между таблицами - “Ожидаемый путь для соединения!”

StackOverflow https://stackoverflow.com/questions/8825181

Вопрос

Я пытаюсь выполнить базовое объединение, которое заняло бы несколько секунд в SQL, но...Я пытаюсь заставить его работать с ORMExecuteQuery (Coldfusion 9 на основе гибернации).

У меня есть 3 объекта:- Контакт - Ссылка на категорию контактов - Категория контактов

Подробная информация о компонентах будет приведена после краткого описания того, что работает, а что нет.

В принципе, контакт может иметь много категорий, и в категории также может быть много контактов.Поскольку мне нужно добавить разные параметры для каждой ссылки (например, я хотел бы упорядочить категории для каждого контакта (конечные пользователи должны иметь возможность изменять порядок категорий), а также другую информацию, требуемую моей системой).Я не использовал отношение "многие ко многим", потому что, похоже, невозможно добавить такую дополнительную информацию.

Итак, вот запрос, который работает идеально:

<cfset response["rows"] = ORMExecuteQuery("
        SELECT new map(c.name as Name)
        FROM Contact c
        ")>

Это прекрасно указывает имя контакта.Однако каждый раз, когда я пытаюсь добавить еще одну таблицу, это приводит к сбою.Например:

<cfset response["rows"] = ORMExecuteQuery("
        SELECT new map(c.name as Name)
        FROM Contact c
        JOIN ContactCategory_Link
        ")>

Даст:

Path expected for join! 

Даже если я меняюсь ContactCategory_Link для ContactCategory_Link.contact, это даст что - то вроде:

Invalid path: 'null.contact'

Итак, я предполагаю, что мои компоненты CFC настроены некорректно, но я не понимаю почему.

Не могли бы вы помочь мне по этому вопросу?


Вот код каждого объекта:

<cfcomponent displayname="Contact" entityname="Contact" table="step8_contact" persistent="true"  output="false">

<cfproperty name="id" column="contactID" type="guid" fieldtype="id" setter="false" unique="true" notnull="true" generated="insert" generator="identity">

<cfproperty name="name" column="name" type="string" length="125" required="true">

<cfproperty name="categories" fieldtype="one-to-many" singularname="category" fkcolumn="contactID" cfc="ContactCategory_Link" missingRowIgnored="true" cascade="all-delete-orphan">

</cfcomponent>

<cfcomponent displayname="ContactCategory_Link" entityname="ContactCategory_Link" table="step8_contactcategory_link" persistent="true" output="false">

<cfproperty name="id" column="contactcategory_linkID" type="numeric" fieldtype="id" setter="false" unique="true" notnull="true" generated="insert" generator="identity">

<cfproperty name="orderId" column="orderId" type="numeric" required="true"> <!---notnull="true"--->

<cfproperty name="contact" fieldtype="many-to-one" fkcolumn="contactID" cfc="Contact" missingRowIgnored="true">
<cfproperty name="contactcategory" fieldtype="many-to-one" fkcolumn="contactcategoryID" cfc="ContactCategory" missingRowIgnored="true">

</cfcomponent>

<cfcomponent displayname="ContactCategory" output="false" persistent="true" entityname="ContactCategory" table="step8_contactcategories" hint="" cacheuse="read-only" cachename="contactcategory">

<cfproperty name="id" column="contactcategoryID" type="numeric" fieldtype="id" setter="false" unique="true" notnull="true" generated="insert" generator="identity">
<cfproperty name="label" column="label" type="string" length="255" required="true" notnull="true">
<cfproperty name="orderId" column="orderId" type="numeric" required="true" notnull="true">

<cfproperty name="categories" fieldtype="one-to-many" singularname="category" fkcolumn="contactcategoryID" cfc="ContactCategory_Link" missingRowIgnored="true" cascade="all-delete-orphan" lazy="true"> 
</cfcomponent>

Спасибо за вашу помощь.

Это было полезно?

Решение

cfset, вероятно, является hql-запросом (hibernate query language = язык объектных запросов).тебе нужно

<cfset response["rows"] = ORMExecuteQuery("
    SELECT c.name as Name, cat.whatever as Whatever
    FROM Contact c
    JOIN c.Categories cat
    ")>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top