CF9.0.1 ORM:错误表上“many-to-many”引用列的“orderby”属性

时间:2012-02-17 14:56:12

标签: hibernate sorting orm coldfusion many-to-many

我遇到了一个奇怪的错误:

could not initialize a collection: [webServiceAction.aAssignedApplication#7]

在查看根本原因之后更有意义:

[Macromedia][SQLServer JDBC Driver][SQLServer]Invalid column name 'sName'

基本上,Hibernate尝试在链接表中找到排序列,而不是在引用的实体后面找到一个表。不知道如何告诉Hibernate正确的位置。

有两个实体(webServiceAction.cfc和app.cfc)通过多对多关系中的表链接。两者都在其他接口之间实现HasName.cfc接口..

来自webServiceAction.cfc的部分:

<cfproperty name="aAssignedApplication" 
    fieldtype="many-to-many"  
    CFC="model.app" 
    linktable="G_TRelWebserviceActionAssignment" 
    fKColumn="fkWebserviceActionID" 
    inversejoincolumn="fkApplicationID" 
    lazy="true" 
    cascade="delete-orphan"  
    orderby="sName">

通过监听MS SQL数据库的探查器捕获的SQL:

select aassigneda0_.fkWebserviceActionID as fkWebser2_5_1_, 
   aassigneda0_.fkApplicationID      as fkApplic1_1_, 
   app1_.pkApplicationID             as pkApplic1_0_0_, 
   app1_.sName                       as sName0_0_, 
   app1_.sUUID                       as sUUID0_0_, 
   app1_.sToken                      as sToken0_0_, 
   app1_.sDescription                as sDescrip5_0_0_, 
   app1_.dCreateDate                 as dCreateD6_0_0_ 
from G_TRelWebserviceActionAssignment aassigneda0_ 
inner join G_TApplication             app1_ on aassigneda0_.fkApplicationID=app1_.pkApplicationID 
where aassigneda0_.fkWebserviceActionID=? 
order by aassigneda0_.sName

从SQL块的最后一行可以看出,Hibernate最终试图在链接表中找到name列,而不是app.cfc对象后面的实际表。

我已经尝试了一个更具体的符号,在它前面添加了实体和表名,但这些尝试也没有用。

提前感谢任何指向正确方向的尝试。 我可能能够使用公式或自己编写XML文件来修复它,但如果可能的话,我想避免这样做。

附录: 我的级联设置过于激进,cascade="save-update"足以完成此任务,但主要问题仍然存在。

1 个答案:

答案 0 :(得分:1)

如果在set定义中设置order by,这是hibernate中的预期行为。在manytomanydefinition中也有一个命令可以做你想要的,但是我不知道如何在coldfusion中说明这一点

<bag table="linktable" order-by="column in linktable">
  <key column="idcol" />
  <many-to-many order-by="column in other table">
    <column name="" />
  </many-to-many>
</bag>