ho tre tabelle, con la seguente struttura:ordinamento su colonna in Tipo Tavolo con ColdFusion ORM
http://dl.dropbox.com/u/2586403/ORMIssues/TableLayout.png
I tre oggetti ho a che fare sono qui:
http://dl.dropbox.com/u/2586403/ORMIssues/Objects.zip
Devo essere in grado di ottenere un oggetto PartObject e quindi estrarre tutti i suoi attributi, ordinati per AttributeName nella tabella Tipi. Qui ci sono i problemi che sto funzionando in:
non posso ordinare la proprietà Attributi a PartObject dalla sua proprietà Attribute.AttributeName
non posso aggiungere la proprietà Attribute.AttributeName a l'entità ObjectAttribute perché ottengo un errore relativo ai nomi delle colonne. Hibernate sta mettendo l'ID sul lato sbagliato del join
Ecco il file di log di ibernazione che mostra il cattivo interrogazione
10/14 16:36:39 [jrpp-12] HIBERNATE DEBUG - select objectattr0_.ID as ID1116_, objectattr0_.AttributeValue as Attribut2_1116_, objectattr0_.AttributeID as Attribut3_1116_, objectattr0_1_.AttributeName as Attribut2_1117_ from ObjectAttributes objectattr0_ inner join Attributes objectattr0_1_ on objectattr0_.ID=objectattr0_1_.AttributeID
10/14 16:36:39 [jrpp-12] HIBERNATE ERROR - [Macromedia] [SQLServer JDBC Driver][SQLServer]Invalid column name 'AttributeID'.
10/14 16:36:39 [jrpp-12] HIBERNATE ERROR - [Macromedia] [SQLServer JDBC Driver][SQLServer]Statement(s) could not be prepared.
Ecco la sezione incriminata della query:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.ID=objectattr0_1_.AttributeID
Dovrebbe essere:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.AttributeID=objectattr0_1_.ID
La proprietà AttributeName sul ObjectAttribute.cfc è quello che causa il problema:
component output="false" persistent="true" table="ObjectAttributes"
{
property name="ID" column="ID" generator="native" type="numeric" ormtype="int" fieldtype="id" unsavedvalue="0" ;
property name="AttributeValue" type="string" ;
property name="Attribute" fieldtype="many-to-one" cfc="Attribute" fkcolumn="AttributeID" fetch="join";
property name="AttributeName" table="Attributes" joincolumn="AttributeID" ;
}
Ho anche provato ad utilizzare una formula per ottenere l'AttributeName sull'entità ObjectAttribute, in questo modo:
component output="false" persistent="true" table="ObjectAttributes"
{
property name="ID" column="ID" generator="native" type="numeric" ormtype="int" fieldtype="id" unsavedvalue="0" ;
property name="AttributeValue" type="string" ;
property name="Attribute" fieldtype="many-to-one" cfc="Attribute" fkcolumn="AttributeID" fetch="join";
property name="AttributeName" type="string" formula="(SELECT A.AttributeName FROM Attributes A WHERE A.ID = AttributeID)";
}
Funziona, ma non posso ordinare in base a quella colonna calcolata. Se io quindi regolare PartObject.cfc in questo modo:
property name="Attributes" cfc="ObjectAttribute" type="array" fkcolumn="ObjectID" fieldtype="one-to-many" orderby="AttributeName";
Ottengo i seguenti errori nel registro hibernatesql:
10/17 16:51:55 [jrpp-0] HIBERNATE DEBUG - select attributes0_.ObjectID as ObjectID2_, attributes0_.ID as ID2_, attributes0_.ID as ID244_1_, attributes0_.AttributeValue as Attribut2_244_1_, attributes0_.AttributeID as Attribut3_244_1_, ((SELECT A.AttributeName FROM Attributes A WHERE A.ID = attributes0_.AttributeID)) as formula25_1_, attribute1_.ID as ID246_0_, attribute1_.AttributeName as Attribut2_246_0_ from ObjectAttributes attributes0_ left outer join Attributes attribute1_ on attributes0_.AttributeID=attribute1_.ID where attributes0_.ObjectID=? order by attributes0_.AttributeName
10/17 16:51:55 [jrpp-0] HIBERNATE ERROR - [Macromedia][SQLServer JDBC Driver][SQLServer]Invalid column name 'AttributeName'.
10/17 16:51:55 [jrpp-0] HIBERNATE ERROR - [Macromedia][SQLServer JDBC Driver][SQLServer]Statement(s) could not be prepared.
Ecco una discarica senza quella proprietà per mostrare che il resto dei rapporti funzionino correttamente:
http://dl.dropbox.com/u/2586403/ORMIssues/Dump.pdf
non ho idea di come risolvere questo problema. Qualsiasi aiuto tu possa fornire sarebbe molto apprezzato.
Grazie,
Dan
Per quanto riguarda 1), perché non si può semplicemente utilizzare uno dei metodi di ordinamento da cflib .org per farlo? Quale codice stai usando per concludere "impossibile ordinare secondo quella colonna calcolata"? –
Sto usando 'property name =" Attributes "cfc =" ObjectAttribute "type =" array "fkcolumn =" ObjectID "fieldtype =" one-to-many "orderby =" AttributeName ";' per provare e ordinare dal calcolo colonna. Questo mi dà l'ultimo messaggio di errore sopra elencato. –
Hai/potresti usare ORMExecuteQuery e HQL per ottenere più controllo su ORDER BY? –