0

我对 Nhibernate 有一个问题——它把右连接放在其他连接的中间。这是我的代码:

private DetachedCriteria GetBaseCriteria()
{
    return DetachedCriteria.For<Foo>("foo")
        .CreateAlias("foo.Bar", "bar")
        .CreateAlias("bar.Baz", "baz", JoinType.InnerJoin);
}

public void Method()
{
    var criteria = GetBaseCriteria();

    criteria.CreateAlias("foo.Something", "something", JoinType.RightOuterJoin);

    ...
}

生成的 SQL 是

SELECT *
FROM foo
INNER JOIN bar ON ...
RIGHT OUTER JOIN something s ON ...
INNER JOIN baz ON ...       
WHERE ...

不幸的是,该查询的结果与期望的不同

SELECT *
FROM foo
INNER JOIN bar ON ...
INNER JOIN baz ON ...
RIGHT OUTER JOIN something s ON ...     
WHERE ...

我试图更改 GetBaseCriteria 中别名的顺序 - 但没有运气......

4

1 回答 1

0

就我而言,我可以通过简单地重新排列 ***.hbm.xml 文件中定义的关系来更改 NHibernate 形成的查询的顺序。

例如,如果 foo.hbm.xml 被定义为

<class name="***, ***" table="foo" >
...
<many-to-one name="bar">...</many-to-one>
<many-to-one name="something">...</many-to-one>
<many-to-one name="baz" >...</many-to-one>

只需更改 bar、something 和 baz 的顺序,如下所示

<class name="***, ***" table="foo" >
...
<many-to-one name="bar">...</many-to-one>
<many-to-one name="baz" >...</many-to-one>
<many-to-one name="something">...</many-to-one>
于 2017-11-27T11:09:36.757 回答