我在一个表“Fault”(左侧)和右侧表格中的关联实体“Review”中设置了父子关系。
------------------------------- -------------------
|Id|Parent|Timestamp|Review_Id| |Id|Note|Timestamp|
------------------------------- -------------------
我的hibernate映射看起来像这样:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Models" assembly="DataAccess">
<class name="Fault" table="Fault">
<cache usage="read-write" />
<id name="Id">
<column name="Id" not-null="true" />
<generator class="guid.comb" />
</id>
<many-to-one name="Parent" class="Fault" column="Parent_Id" cascade="all" />
<one-to-one name="Review" class="Review" property-ref="Fault" />
<bag name="SubFaults" lazy="true" order-by="Timestamp">
<key column="Parent_Id" />
<one-to-many class="Fault" />
</bag>
<property name="Timestamp" not-null="false" />
</class>
</hibernate-mapping>
当我访问SubFaults集合时,我得到一个关于模糊列“Timestamp”的异常。查看生成的查询可以快速显示问题。最后在“ORDER BY Timestamp”中没有使用别名。这导致了非常例外,因为当然机器人表“故障”和“评论”连接在一起,它们都有一个列“时间戳”。当我改变这一行:“”到“”然后一切都很好。但是我需要通过他们的时间戳来订购SubFaults。我做错了什么?
答案 0 :(得分:1)
在任何情况下,当我们使用数据库引擎关键字时,有用的方法是包装列名。对于SQL Server,它是[]
。所以,尝试使用
<property name="Timestamp" column="[Timestamp]" not-null="false" />
还有更多的通用样式,我记得像``这样的符号,但是对于sql server,[]可以完成这项工作