Tengo tres tablas, con la siguiente estructura:clasificación en la columna Tipo de tabla con ColdFusion ORM
http://dl.dropbox.com/u/2586403/ORMIssues/TableLayout.png
Los tres objetos que trato son aquí:
http://dl.dropbox.com/u/2586403/ORMIssues/Objects.zip
Necesito poder obtener un PartObject y luego extraer todos sus atributos, ordenados por el AttributeName en la tabla Types. Estos son los problemas que estoy corriendo en:
no puedo ordenar la propiedad Attributes en PartObject por su propiedad Attribute.AttributeName
no puedo añadir la propiedad a Attribute.AttributeName la entidad ObjectAttribute porque recibo un error con respecto a los nombres de las columnas. Hibernate es poner la ID en el lado equivocado de la unión
Aquí está el archivo de registro de hibernación que muestra la mala consulta
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.
Aquí está la sección infractor de la consulta:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.ID=objectattr0_1_.AttributeID
debe ser:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.AttributeID=objectattr0_1_.ID
La propiedad AttributeName en el ObjectAttribute.cfc es el que causa el 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" ;
}
También he intentado usar una fórmula para obtener el AttributeName en la entidad ObjectAttribute, así:
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)";
}
Esto funciona, pero no puedo ordenar por esa columna calculada. Si a continuación, ajuste PartObject.cfc así:
property name="Attributes" cfc="ObjectAttribute" type="array" fkcolumn="ObjectID" fieldtype="one-to-many" orderby="AttributeName";
consigo los siguientes errores en el registro de 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.
Aquí hay un vertedero sin esa propiedad para mostrar que el resto de las relaciones están funcionando correctamente:
http://dl.dropbox.com/u/2586403/ORMIssues/Dump.pdf
no tengo ni idea de cómo solucionar este problema. Cualquier ayuda que pueda proporcionar sería muy apreciada.
Gracias,
Dan
En cuanto a 1), ¿por qué no puede usted sólo tiene que utilizar uno de los métodos de clasificación de cflib .org para hacerlo? ¿Qué código está utilizando para concluir que "no se puede ordenar por esa columna calculada"? –
Estoy usando 'property name =" Atributos "cfc =" ObjectAttribute "type =" array "fkcolumn =" ObjectID "fieldtype =" uno-a-muchos "orderby =" AttributeName ";' para intentar y ordenar por el calculado columna. Eso me da el último mensaje de error enumerado arriba. –
¿Ha usado/podría usar ORMExecuteQuery y HQL para obtener más control sobre ORDER BY? –