我遇到了一个奇怪的错误:
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"
足以完成此任务,但主要问题仍然存在。
答案 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>