【发布时间】:2010-11-19 14:25:15
【问题描述】:
是否可以在 Nhibernate 中浏览复合 ID 的键多对一关联?
我使用以下设置映射了一些(旧)表:
<class name="StructureUser">
<composite-id>
<key-many-to-one name="Structure" class="Structure" column="STRUKTUR_ID" />
<key-many-to-one name="User" class="User" column="USERID" />
</composite-id>
...
</class>
<class name="Structure">
<id name="Id" column="id" type="Int32" >
<generator class="native"/>
</id>
<property name="Low" column="low" type="Int32" />
...
</class>
我想通过查询中的 StructureUser 类访问 Structure 的“Low”属性。我尝试了我能想到的 Criteria API 的所有用法,但总是出错。以下是我尝试的两个查询:
ICriteria crit1 = Session.CreateCriteria(typeof(StructureUser))
.CreateAlias("Structure", "struc")
.Add(Restrictions.Le("struc.Low", 123));
ICriteria crit2 = Session.CreateCriteria(typeof(StructureUser))
.Add(Restrictions.Le("Structure.Low", 123));
crit1 中的错误来自数据库并说“struc_1.Low 在此上下文中无效”,因为 NHibernate 不会生成 sql 命令中的限制所需的连接。 crit2 中的错误来自 NHibernate,告诉我它无法访问 StructureUser 上的“Structure.Low”属性。
我通过使用 key-property 元素声明复合 ID 并声明与普通多对一元素的关系来解决这个问题。
这个问题还有其他解决方案吗?
【问题讨论】:
-
我遇到了类似的问题。
标签: c# nhibernate join composite-id