如果来自相关实体的字段未在查询中使用,则NHibernate通常相当智能并省略多对一的连接。但是,我想在没有subselect的情况下在其他表上做一个公式识别器,所以我做了一个自定义的persister
protected override string DiscriminatorFormulaTemplate
{
get { return this.DiscriminatorFormula; }
}
并在公式中仅指定了一个列名(但此列名来自相关表)
<discriminator formula="TypeID" />
我知道这通常容易发生名称冲突,但在这种特殊情况下,这不是问题。
所以现在我想强制相关的(many-to-one
)表始终加入主表。做这个的最好方式是什么?当HN检测到某些字段被使用时,它会被连接一些,但是我不知道如何强制它一直这样做。
答案 0 :(得分:2)
<many-to-one ... fetch="join"/>
这包括Get,Criteria和延迟加载,但不包括HQL。
另一个选择是对所有操作使用自定义SQL,并从子查询而不是表中选择(在该查询中使用连接)
不幸的是,你在这一点上做的任何事情都是黑客攻击。 NH的设计方式,鉴别器必须在同一个表中。