coldfusion fw1 (hibernate) базовое соединение между таблицами - "Ожидается путь для соединения!"
Я пытаюсь сделать базовое соединение, которое займет несколько секунд в SQL, но... Я пытаюсь заставить его работать с ORMExecuteQuery (Coldfusion 9 на основе Hibernate).
У меня есть 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>
Спасибо за вашу помощь.
1 ответ
cfset, вероятно, является hql-запросом (язык запросов hibernate = язык запросов объектов). вам нужно
<cfset response["rows"] = ORMExecuteQuery("
SELECT c.name as Name, cat.whatever as Whatever
FROM Contact c
JOIN c.Categories cat
")>