看来,当使用下面的NHibernate查询,我没有得到一个根实体时,左外连接没有记录。NHibernate集合左外部加入哪里条款问题
ICriteria critera = session.CreateCriteria(typeof(Entity));
criteria.CreateCriteria("SubTable.Property", "Property", NHibernate.SqlCommand.JoinType.LeftOuterJoin);
criteria.Add(Expression.Not(Expression.Eq("Property", value)));
,我试图生成SQL是:
SELECT * FROM BaseTable
LEFT JOIN (
SELECT * FROM SubTable
WHERE Property <> value
)Sub ON Sub.ForeignKey = BaseTable.PrimaryKey
注意,where子句是左内加入的SELECT语句。这样如果没有任何加工子记录,我们仍然会获得最高的记录。看起来NHibernate正在生成以下SQL。
SELECT * FROM BaseTable
LEFT JOIN (
SELECT * FROM SubTable
)Sub ON Sub.ForeignKey = BaseTable.PrimaryKey
WHERE Sub.Property <> value
有没有办法实现第一块SQL?我已经尝试过了:
ICriteria critera = session.CreateCriteria(typeof(Entity));
criteria.CreateCriteria("SubTable.Property", "Property", NHibernate.SqlCommand.JoinType.LeftOuterJoin);
criteria.Add(
Restrictions.Disjunction()
.Add(Expression.IsNull("Property"))
.Add(Expression.Not(Expression.Eq("Property", value)));
我正在寻找使用Criteria API的解决方案。
你可以看一看NHibernate的日志文件,查看正在发出什么SQL语句。 – 2010-09-30 14:41:56