У меня есть три таблицы со следующей структурой:
http://dl.dropbox.com/u/2586403/ORMIssues/TableLayout.png
Три объекта, с которыми я имею дело, находятся здесь:
http://dl.dropbox.com/u/2586403/ORMIssues/Objects.zip
Мне нужно иметь возможность получить PartObject, а затем вытащить все его атрибуты, отсортированные по AttributeName в таблице типов.Вот проблемы, с которыми я сталкиваюсь:
Я не могу отсортировать свойство Attributes в PartObject по его свойству Attribute.AttributeName
Я не могу добавить свойство Attribute.AttributeName к объекту ObjectAttribute, потому что я получаю сообщение об ошибке в отношении имен столбцов.Hibernate помещает идентификатор в неправильную сторону объединения
Вот файл журнала гибернации, показывающий неверный запрос
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.
Вот неправильный раздел запроса:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.ID=objectattr0_1_.AttributeID
Это должно быть:
from ObjectAttributes objectattr0_
inner join Attributes objectattr0_1_ on objectattr0_.AttributeID=objectattr0_1_.ID
Свойство AttributeName в ObjectAttribute.cfc является причиной проблемы:
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" ;
}
Я такжепопытался использовать формулу, чтобы получить AttributeName для объекта ObjectAttribute, например так:
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)";
}
Это работает, но я не могу отсортировать по этому вычисленному столбцу.Если я затем настрою PartObject.cfc следующим образом:
property name="Attributes" cfc="ObjectAttribute" type="array" fkcolumn="ObjectID" fieldtype="one-to-many" orderby="AttributeName";
Я получу следующие ошибки в журнале 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.
Вот дамп без этого свойствачтобы показать, что остальные отношения работают должным образом:
http://dl.dropbox.com/u/2586403/ORMIssues/Dump.pdf
Я не знаю, как решить эту проблему.Любая помощь, которую вы можете предоставить, будет принята с благодарностью.
Спасибо,
Дан