2010-12-01 35 views
0

NHibernate通常相当聪明,如果在查询中不使用来自相关实体的字段,则多对一地省略连接。不过,我想这样做就没有再选择其他表中的公式识别器,所以我做了一个自定义的留存与如何强制NHibernate总是进行多对一的连接

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

,并指定只在公式的列名(不过这列名是从相关表)

<discriminator formula="TypeID" /> 

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

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

回答

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

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

另一种选择是使用自定义的SQL的所有操作,并选择从一个子查询,而不是表(与查询里面加入)

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