2010-11-14 62 views
1

我有以下条件。NHibernate左加入限制

session.CreateCriteria<DomainModels.Models.FreieAbrechnung>() 
     .CreateAlias("FreieAbrechnungPositionen", "fp", JoinType.LeftOuterJoin)            
     .Add(Restrictions.Eq("fp.IstAktiv", true)) 
     .Add(Restrictions.Eq("Kunde.ID", kundenId)) 
     .Add(Restrictions.Eq("IstAktiv", true)) 
     .Add(Restrictions.Eq("Abgeschlossen", false)) 
     .SetResultTransformer(CriteriaSpecification.DistinctRootEntity)            
     .List<DomainModels.Models.FreieAbrechnung>(); 

所以我得到这个的SQL语句:

SELECT this_.ID as ID13_1_, this_.Version as Version13_1_, 
this_.KundeID as KundeID13_1_, this_.Erstellungsdatum as Erstellu4_13_1_, 
this_.Druckdatum as Druckdatum13_1_, this_.Abgeschlossen as Abgeschl6_13_1_, 
this_.AbgeschlossenDatum as Abgeschl7_13_1_, this_.IstAktiv as IstAktiv13_1_, 
this_.ErstelltDurchID as Erstellt9_13_1_, this_.ErstelltAm as ErstelltAm13_1_, 
this_.MutationDurch as Mutatio11_13_1_, this_.MutationAm as MutationAm13_1_, 
fp1_.FreieAbrechnungID as FreieAbr3_3_, fp1_.ID as ID3_, fp1_.ID as ID12_0_, 
fp1_.Version as Version12_0_, fp1_.FreieAbrechnungID as FreieAbr3_12_0_, 
fp1_.KundeID as KundeID12_0_, fp1_.Bezeichnung as Bezeichn5_12_0_, 
fp1_.Betrag as Betrag12_0_, fp1_.Erstellungsdatum as Erstellu7_12_0_, 
fp1_.MwStSteuerCodeID as MwStSteu8_12_0_, fp1_.IstAktiv as IstAktiv12_0_, 
fp1_.ErstelltDurchID as Erstell10_12_0_, fp1_.ErstelltAm as ErstelltAm12_0_, 
fp1_.MutationDurch as Mutatio12_12_0_, fp1_.MutationAm as MutationAm12_0_ 
FROM 
FreieAbrechnung this_ 
left outer join FreieAbrechnungPosition fp1_ on this_.ID=fp1_.FreieAbrechnungID 
WHERE 
fp1_.IstAktiv = 1 and this_.KundeID = 1 and this_.IstAktiv = 1 and this_.Abgeschlossen = 0 

的问题是,这些限制fp1_.IstAktiv = 1是where子句。这个限制必须在左外连接中。像这样:

left outer join FreieAbrechnungPosition fp1_ on this_.ID=fp1_.FreieAbrechnungID and fp1_.IstAktiv = 1 

我应该在条件中更改哪些内容,以便获得正确的Sql语句?

感谢, 达尼

回答

0

要条件添加到一起,你必须使用,而不是标准的HQL。

查询的粗略的翻译是:

select f 
from FreieAbrechnung f 
left join f.FreieAbrechnungPositionen fp with IstAktiv = 1 
where f.IsAktiv = 1 
... etc 
+0

感谢。我如何用FreieAbrechnung加载FreieAbrechnungPositionen?我不能这样做:select f,fp from ... – Dani 2010-11-14 19:12:58

+0

left join ** fetch ** f.FreieAbrechnungPositionen fp等 – 2010-11-14 19:17:18

+0

现在我有这个例外:with-clause不允许获取关联;使用过滤器。但我不知道如何将滤镜设置为FreieAbrechnungPositionen而不是with-clause。 – Dani 2010-11-14 20:25:37