Frage

Ich habe drei Tabellen mit folgenden Struktur:

http://dl.dropbox.com/u/2586403/ORMIssues/ TableLayout.png

Die drei Objekte, die ich mit zu tun habe sind hier:

http://dl.dropbox.com/u/2586403/ORMIssues/ Objects.zip

Ich brauche eine PartObject, um in der Lage zu bekommen und dann alle seine Attribute ziehen, durch die Attribut in der Tabelle Typen sortiert. Hier sind die Probleme, die ich renne in:

  1. Ich kann nicht sortiert die Attribute Eigenschaft in PartObject durch seine Attribute.AttributeName Eigenschaft

  2. Ich kann die Attribute.AttributeName Eigenschaft auf die ObjectAttribute Einheit hinzufügen, weil ich einen Fehler in Bezug auf Spaltennamen erhalten. Hibernate setzt die ID auf der falschen Seite des Join

Hier ist die Hibernate-Protokolldatei die schlechte Abfrage zeigt

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. 

Hier ist der säumige Abschnitt der Abfrage:

from ObjectAttributes objectattr0_ 
inner join Attributes objectattr0_1_ on objectattr0_.ID=objectattr0_1_.AttributeID 

Es sollte sein:

from ObjectAttributes objectattr0_ 
inner join Attributes objectattr0_1_ on objectattr0_.AttributeID=objectattr0_1_.ID 

Die Attribut Eigenschaft auf dem ObjectAttribute.cfc ist derjenige, der das Problem verursacht:

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" ; 
} 

Ich habe auch versucht, eine Formel mit dem Attribut auf der ObjectAttribute Einheit zu erhalten, etwa so:

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)";
}

Das funktioniert, aber ich kann nicht sortieren nach dieser berechneten Spalte. Wenn ich dann PartObject.cfc einstellen wie folgt:

property name="Attributes" cfc="ObjectAttribute" type="array" fkcolumn="ObjectID" fieldtype="one-to-many" orderby="AttributeName";

ich die folgenden Fehler im hibernatesql Protokoll erhalten:

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.

Hier ist ein Dump ohne diese Eigenschaft zeigen, dass der Rest der Beziehungen problemlos funktionieren:

http://dl.dropbox.com/u/2586403/ORMIssues/ Dump.pdf

Ich habe keine Ahnung, wie dieses Problem zu beheben. Jede Hilfe Sie bereitstellen können, würde sehr geschätzt.

Danke,

Dan

War es hilfreich?

Lösung

Ich löste diese mit Sams Hilfe, indem sie ein Verfahren in meinem Dienst einrichten, der die Elemente in der Reihenfolge zurückgegeben ich wollte. Ich ORMExecuteQuery nur verwendet, um die Elemente in der richtigen Reihenfolge zu erhalten, und wenn es keine Artikel ist, nur ein leeres Array zurückgegeben.

Die letzte Methode so ausgesehen, wo Spezifikationen direkt in dem Objekt in der Reihenfolge festgelegt werden möchte ich sie:

/**
@hint Gets a SpecGroups object based on ID. Pass 0 to retrieve a new empty SpecGroups object
@ID the numeric ID of the SpecGroups to return
@roles Admin, User
*/
remote ORM.SpecGroups function getSpecGroup(required numeric ID){
    if(Arguments.ID EQ 0){
        return New ORM.SpecGroups();
    }else{
        LOCAL.SpecGroup = EntityLoadByPK("SpecGroups", Arguments.ID);
        LOCAL.SpecsInGroup = ORMExecuteQuery("SELECT Spec FROM SpecInGroup G WHERE G.SpecGroupID = :GroupID ORDER BY SpecLabel, SpecName", {GroupID = LOCAL.SpecGroup.getID()});
        LOCAL.SpecGroup.setSpecifications(LOCAL.SpecsInGroup);
        return LOCAL.SpecGroup;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top