NHibernate集合左外部加入哪里条款问题
问题描述:
看来,当使用下面的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的解决方案。
答
尝试this:
var hql = @"select bt
from BaseTable bt
left join bt.SubTable subt
with subt.Property <> :property";
或许:
var hql = @"select bt
from BaseTable bt
left join bt.SubTable subt
where subt.ForeignKey = bt.PrimaryKey
and subt.Property <> :property";
最后:
var result = session.CreateQuery(hql)
.SetParameter("property", "whateverValue")
.List<BaseTable>();
+0
想用NHibernate的Criteria API解决这个问题。谢谢 – a432511 2010-10-04 03:22:12
答
我不使用NHibernate的,但我认为这是你需要生成SQL:
SELECT *
FROM BaseTable
LEFT JOIN SubTable sub
ON Sub.ForeignKey = BaseTable.PrimaryKey and sub.Property <> value
你想要什么ISN;吨,其中clasue,但是,加入一个附加条件。希望有所帮助。
你可以看一看NHibernate的日志文件,查看正在发出什么SQL语句。 – 2010-09-30 14:41:56