假设我有两个类: Parent
和 Child
。 Parent
有一个属性 Children
,它当然是 Child
对象的集合。Child
没有 ParentId
属性。它确实有一个 Parent
属性。
因此,我对 Child
的 NHibernate 映射包括:
<many-to-one name="Parent" class="Parent" column="ParentId" cascade="save-update" />
我的
Parent
映射包括:<bag name="children" access="field" inverse="true" cascade="all-delete-orphan">
<key column="ParentId" />
<one-to-many class="Child" />
</bag>
现在这就是我想要做的:我想使用特定的
Child
获取所有 ParentId
对象。我知道我可以先获取 Parent
,然后返回其 Children
属性。但是如果我想直接查询 Child
表怎么办?如果它是一个映射属性(例如,
Name
),我可以使用 NHibernate 的标准,但在这种情况下, ParentId
没有映射。我尝试使用类似的东西:
criteria.Add(Restrictions.Eq("Parent.Id", 1));
但这不起作用。我求助于使用 SQLCriterion(如 here 所解释的),但一位 friend /同事让我认为必须有更好的方法。
有任何想法吗?有投影和
Restrictions.EqProperty
的东西?
最佳答案
我已经使用 query over 完成了这项工作。下面是一个例子:
Child foundChild =
session.QueryOver<Child>()
.Where(x => x.Parent.Id == 1234).SingleOrDefault<Child>();
关于nhibernate - 如何使用 NHibernate 查询外键列,而不检索相关实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8807187/