Pregunta

Estoy tratando de hacer una unión básica que tomaría unos segundos en SQL, pero ... estoy tratando de que funcione con OrmexecuteQuery (Coldfusion 9 basado en Hibernate).

Tengo 3 objetos: - Contact - ContactCategory_Link - ContactCategory

Los detalles de los componentes seguirán después de la breve descripción de lo que funciona y lo que no funciona.

Básicamente, un contacto puede tener muchas categorías, y una categoría también puede tener muchos contactos. Dado que necesito agregar diferentes parámetros para cada enlace (por ejemplo, me gustaría pedir las categorías para cada contacto (los usuarios finales deben poder reordenar las categorías), además de otra información requerida por mi sistema). No utilicé la relación de muchos a muchos porque no parece ser posible agregar ese tipo de información adicional.

Así que aquí está la solicitud que funciona perfectamente:

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

Da perfectamente el nombre de contacto. Sin embargo, cada vez que intento agregar otra tabla, fallará. Por ejemplo:

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

Daré:

Path expected for join! 

Incluso si estoy cambiando ContactCategory_Link por ContactCategory_Link.contact, dará algo como:

Invalid path: 'null.contact'

Así que supongo que mis componentes CFC no están configurados correctamente, pero no veo por qué.

¿Podrías ayudarme en este tema?


Aquí está el código de cada objeto:

<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>

Gracias por tu ayuda.

¿Fue útil?

Solución

CFSET es probablemente un HQL-Query (lenguaje de consulta Hibernate = lenguaje de consulta de objetos). necesitas

<cfset response["rows"] = ORMExecuteQuery("
    SELECT c.name as Name, cat.whatever as Whatever
    FROM Contact c
    JOIN c.Categories cat
    ")>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top