程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用ColdFusion ORM在类型表中的列上排序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用COldFusion ORM在类型表中的列上排序?

开发过程中遇到使用COldFusion ORM在类型表中的列上排序的问题如何解决?下面主要结合日常开发的经验,给出你关于使用COldFusion ORM在类型表中的列上排序的解决方法建议,希望对你解决使用COldFusion ORM在类型表中的列上排序有所启发或帮助;

我在Sam的帮助下解决了这一问题,方法是在service中设置一种方法,该方法以所需顺序返回商品。我只是使用ORMExecutequery以正确的顺序获取项目,如果没有项目,则返回一个空数组。

最终方法如下所示,其中规范按照我想要的顺序直接在对象中设置:

/**
@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;
    }
}

解决方法

我有三个表,结构如下:

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

我正在处理的三个对象在这里:

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

我需要能够获取PartObject,然后提取其所有属性,并按Types表中的Attributename进行排序。这是我遇到的问题:

  1. 我无法按PartObject的Attribute.Attributename属性对Attributes属性进行排序

  2. 我无法将Attribute.Attributename属性添加到ObjectAttribute实体,因为出现关于列名的错误。Hibernate将ID放在连接的错误一侧

这是显示错误查询的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

ObjectAttribute.cfc上的Attributename属性是导致问题的一个:

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

我也尝试过使用公式来获取ObjectAttribute实体上的Attributename,如下所示:

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

我不知道如何解决此问题。您能提供的任何帮助将不胜感激。

谢谢,

大佬总结

以上是大佬教程为你收集整理的使用ColdFusion ORM在类型表中的列上排序全部内容,希望文章能够帮你解决使用ColdFusion ORM在类型表中的列上排序所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: