Mam trzy tabele, o następującej strukturze:Sortowanie kolumna w tabeli z ColdFusion typu ORM
http://dl.dropbox.com/u/2586403/ORMIssues/TableLayout.png
Trzy obiekty mam do czynienia tutaj:
http://dl.dropbox.com/u/2586403/ORMIssues/Objects.zip
Potrzebuję móc uzyskać PartObject, a następnie wyciągnąć wszystkie jego atrybuty, posortowane według AttributeName w tabeli Types. Oto problemy biegnę do:
nie mogę uporządkować własność atrybutów PartObject jego własności Attribute.AttributeName
nie mogę dodać właściwość Attribute.AttributeName do Obiekt ObjectAttribute, ponieważ pojawia się błąd dotyczący nazw kolumn. Hibernacja jest wprowadzenie identyfikatora po niewłaściwej stronie przyłączyć
Oto plik dziennika hibernacji pokazujące złe zapytanie
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.
Oto odcinek wykraczająca zapytania:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.ID=objectattr0_1_.AttributeID
Powinno być:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.AttributeID=objectattr0_1_.ID
Obiekt AttributeName na ObjectAttribute.cfc jedną przyczyną problemu:
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" ;
}
Ja również próbowałem przy użyciu formuły, aby uzyskać attributeName na jednostkę ObjectAttribute, tak:
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)";
}
To działa, ale nie mogę sortować według tej kolumny obliczeniowej. Gdybym wtedy dostosować PartObject.cfc tak:
property name="Attributes" cfc="ObjectAttribute" type="array" fkcolumn="ObjectID" fieldtype="one-to-many" orderby="AttributeName";
otrzymuję następujące błędy w dzienniku 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.
Oto zrzut bez że właściwość, aby pokazać, że reszta relacji działają prawidłowo:
http://dl.dropbox.com/u/2586403/ORMIssues/Dump.pdf
nie mam pojęcia, jak rozwiązać ten problem. Każda pomoc, którą możesz zapewnić, byłaby bardzo doceniana.
Dzięki,
Dan
Odnośnie 1), dlaczego nie można po prostu użyć jednej z metod sortowania z cflib .org to zrobić? Jakiego kodu używasz do podsumowania "nie można sortować według tej kolumny obliczeniowej"? –
Używam 'property name =" Atrybuty "cfc =" ObjectAttribute "type =" array "fkcolumn =" ObjectID "fieldtype =" jeden-do-wielu "orderby =" AttributeName ";' aby spróbować i uporządkować według obliczeń kolumna. To daje mi ostatni komunikat o błędzie wymieniony powyżej. –
Czy możesz/możesz użyć ORMExecuteQuery i HQL, aby uzyskać większą kontrolę nad ORDER BY? –