如何强制NHibernate始终对多对一进行连接

如何强制NHibernate始终对多对一进行连接,nhibernate,Nhibernate,NHibernate通常相当智能,如果查询中不使用相关实体中的字段,则省略多对一的连接。然而,我想在另一个表上做一个公式鉴别器,而不使用subselect,所以我用 protected override string DiscriminatorFormulaTemplate { get { return this.DiscriminatorFormula; } } 并在公式中仅指定了一个列名(但此列名来自相关表) 我理解这通常容易发生名称冲突,但在这种特定情况下,这不是问题 因此,

NHibernate通常相当智能,如果查询中不使用相关实体中的字段,则省略多对一的连接。然而,我想在另一个表上做一个公式鉴别器,而不使用subselect,所以我用

protected override string DiscriminatorFormulaTemplate
{
    get { return this.DiscriminatorFormula; }
}
并在公式中仅指定了一个列名(但此列名来自相关表)


我理解这通常容易发生名称冲突,但在这种特定情况下,这不是问题

因此,现在我想强制相关(
many-to-one
)表始终连接到主表。最好的方法是什么?当HN检测到某些字段被使用时,它有时会被加入,但我不知道如何强制它一直这样做。


<many-to-one ... fetch="join"/>
这包括Get、条件和延迟加载,但不包括HQL

另一个选项是对所有操作使用自定义SQL,并从子查询而不是表中进行选择(在该查询中使用联接)

不幸的是,你在这一点上所做的任何事情都将是一次黑客攻击。按照NH的设计方式,鉴别器必须在同一个表中

<many-to-one ... fetch="join"/>