如何强制NHibernate总是为多对一进行连接

时间:2010-12-01 10:25:09

标签: nhibernate

如果来自相关实体的字段未在查询中使用,则NHibernate通常相当智能并省略多对一的连接。但是,我想在没有subselect的情况下在其他表上做一个公式识别器,所以我做了一个自定义的persister

protected override string DiscriminatorFormulaTemplate
{
    get { return this.DiscriminatorFormula; }
}

并在公式中仅指定了一个列名(但此列名来自相关表)

<discriminator formula="TypeID" />

我知道这通常容易发生名称冲突,但在这种特殊情况下,这不是问题。

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

1 个答案:

答案 0 :(得分:2)

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

这包括Get,Criteria和延迟加载,但不包括HQL。

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

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