coldfusion fw1 (veille prolongée) de base jointure entre les tables - « chemin prévu pour rejoindre! »

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

Question

Je suis en train de faire une jointure de base qui prendrait quelques secondes dans SQL mais ... je suis en train de le faire fonctionner avec ORMExecuteQuery (Coldfusion 9 sur la base Hibernate).

J'ai 3 objets: - Contact - ContactCategory_Link - ContactCategory

détails des composants suivra après la brève description de ce qui fonctionne et ce qui ne fonctionne pas.

Fondamentalement, un contact peut avoir de nombreuses catégories, et une catégorie peut avoir de nombreux contacts aussi bien. Depuis que je dois ajouter différents paramètres pour chaque lien (par exemple, je voudrais commander les catégories pour chaque contact (utilisateurs finaux doivent être en mesure de réorganiser les catégories), ainsi que d'autres informations requises par mon système). Je n'ai pas utilisé beaucoup-à-plusieurs parce qu'il ne semble pas être possible d'ajouter ce genre d'informations supplémentaires.

Voici donc la demande qui fonctionne parfaitement:

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

Il donne parfaitement le nom du contact. Cependant, chaque fois que j'essaie d'ajouter une autre table, il échouera. Par exemple:

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

Donnera:

Path expected for join! 

Même si je change ContactCategory_Link pour ContactCategory_Link.contact, il donnera quelque chose comme:

Invalid path: 'null.contact'

Je suppose que mes composants CFC ne sont pas correctement réglée, mais je ne vois pas pourquoi.

Pourriez-vous me aider à ce sujet?


Voici le code de chaque objet:

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

Merci pour votre aide.

Était-ce utile?

La solution

cfset est probablement une hql-requête (mise en veille prolongée requête language = objet langage de requête). vous devez

<cfset response["rows"] = ORMExecuteQuery("
    SELECT c.name as Name, cat.whatever as Whatever
    FROM Contact c
    JOIN c.Categories cat
    ")>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top