当前位置: 首页 > 面试题库 >

使用ColdFusion ORM在类型表中的列上排序

华建同
2023-03-14
问题内容

我有三个表,结构如下:

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

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

谢谢,


问题答案:

我在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;
    }
}


 类似资料:
  • 我试图创建动态下拉,其值是从使用微服务的查找表之一填充,但我已经尝试了许多方式相同,到目前为止,我还没有成功地使其工作。 下面的代码用于调用webservice 这是我的对象类型 仅用于显示目前运行的以下代码 我做了什么我尝试调用webservice在多种方式调用它,尝试铸造服务响应直接使用JSON字符串响应和可能的事情我尝试过。 你能在这里帮忙吗?我们将不胜感激。

  • 正如我的问题所描述的,如何在java中对类型数组的列表进行排序? 这是我的ListClass 这是我的驾驶程序 现在,我希望在ListClass中有一个通用排序方法,可以对通过驱动程序生成的任何类型的列表(字符串、整数、双精度、浮点等)进行排序。

  • 我正在对地图执行firestore查询 没有人工作过,任何帮助都是感激的 谢谢你抽出时间

  • 我决定问这里,这样我就能解决我的问题。在我写信给你之前,我可以向你保证,我在谷歌搜索了很多,但没有找到答案。 在我的PRIMEFACES中,p:DataTable中p:Column中的sortBy和filterBy不起作用。 让我们从SortBy开始。()在我尝试的所有版本中,如您在下面的pom.xml中所看到的:6.2,7.0,7.0.rc3,8.0,8.0.rc3中所示,它都有这样的行为:它显

  • 所以我基本上有表格视图,那里有一些列。其中一列(价格)由字符串组成,实际上表示双精度。唯一的原因是,因为我希望双倍,例如,因为 1 将显示为 1.00。但是正因为如此,我不能正确使用默认排序(排序双精度)。我可以以某种方式更改它,所以当我按下该按钮时,它会将它们排序为双倍类型? 如果需要,请在此处编码:

  • 问题内容: 我了解使用(1),可以交换List接口的实现。似乎(1)通常在应用程序中使用,而不需要它(我自己总是使用它)。 我想知道是否有人使用(2)? 另外,这种情况实际需要多久(并且我可以举个例子),实际需要使用(1)而不是(2)(即,其中(2)不足以..除了对接口和最佳实践进行编码等之外) 问题答案: 几乎总是首选而不是首选,因为例如,可以将其转换为一个LinkedList而不会影响其余代码